git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* URL substitution and config file precedence
@ 2010-08-02 15:37 martin f krafft
  2010-08-02 16:05 ` Ævar Arnfjörð Bjarmason
  2010-08-02 20:57 ` Jonathan Nieder
  0 siblings, 2 replies; 5+ messages in thread
From: martin f krafft @ 2010-08-02 15:37 UTC (permalink / raw)
  To: git discussion list

[-- Attachment #1: Type: text/plain, Size: 2013 bytes --]

Dear Gits,

I expect .git/config to tae precedence over ~/.gitconfig, which in
turn gets favoured over /etc/gitconfig. This works fine, except for
the url.….insteadOf settings.

Have a look at the following:

  % grep madduck: .git/config
    url = madduck:pub/puppet/modules/git

  % grep -B1 nsteadOf /etc/gitconfig ~/.gitconfig
  /etc/gitconfig-[url "git://git.madduck.net/madduck/"]
  /etc/gitconfig: insteadOf = madduck:
  --
  /home/madduck/.gitconfig-[url "ssh://git.madduck.net/madduck/"]
  /home/madduck/.gitconfig:       insteadOf = madduck:
  /home/madduck/.gitconfig:       pushInsteadOf = git://git.madduck.net/madduck/

  % git push -v
  Pushing to git://git.madduck.net/madduck/pub/puppet/modules/git
  fatal: The remote end hung up unexpectedly

There seem to be two problems:

  1. the value from /etc/gitconfig seems to be preferred over the
     one from ~/.gitconfig. I think this is due to the fact that the
     syntax for URL substitution is a bit whack and the two keys
     different, so the merge is actually a union-merge, and then the
     result is probably just the first match (git:// sorts before
     ssh://).

  2. URL substitution is not recursive, or else the git:// URL would
     eventually be replaced with the ssh:// URL.

I can address both issues by adding a "pushInsteadOf = madduck:" to
~/.gitconfig, but …

… that only addresses pushing. I don't see a way to fix fetching,
where the pushInsteadOf trick does not work.

Any ideas how to work around it?

Why was the syntax chosen backwards in this way? Why not have

  [urlsubst "madduck:"]
      replaceWith = ssh://git.madduck.net/madduck/

or even better:

  [url_regsubst]
      somefreelychosenname = s|madduck:|ssh://git.madduck.net/madduck/|

Thoughts?

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"stab it and steer"
                                                             -- sailor
 
spamtraps: madduck.bogus@madduck.net

[-- Attachment #2: Digital signature (see http://martin-krafft.net/gpg/) --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: URL substitution and config file precedence
  2010-08-02 15:37 URL substitution and config file precedence martin f krafft
@ 2010-08-02 16:05 ` Ævar Arnfjörð Bjarmason
  2010-08-02 17:38   ` martin f krafft
  2010-08-02 20:57 ` Jonathan Nieder
  1 sibling, 1 reply; 5+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2010-08-02 16:05 UTC (permalink / raw)
  To: martin f krafft; +Cc: git discussion list

On Mon, Aug 2, 2010 at 15:37, martin f krafft <madduck@madduck.net> wrote:
> Dear Gits,
>
> I expect .git/config to tae precedence over ~/.gitconfig, which in
> turn gets favoured over /etc/gitconfig. This works fine, except for
> the url.….insteadOf settings.
>
> Have a look at the following:
>
>  % grep madduck: .git/config
>    url = madduck:pub/puppet/modules/git
>
>  % grep -B1 nsteadOf /etc/gitconfig ~/.gitconfig
>  /etc/gitconfig-[url "git://git.madduck.net/madduck/"]
>  /etc/gitconfig: insteadOf = madduck:
>  --
>  /home/madduck/.gitconfig-[url "ssh://git.madduck.net/madduck/"]
>  /home/madduck/.gitconfig:       insteadOf = madduck:
>  /home/madduck/.gitconfig:       pushInsteadOf = git://git.madduck.net/madduck/
>
>  % git push -v
>  Pushing to git://git.madduck.net/madduck/pub/puppet/modules/git
>  fatal: The remote end hung up unexpectedly
>
> There seem to be two problems:
>
>  1. the value from /etc/gitconfig seems to be preferred over the
>     one from ~/.gitconfig. I think this is due to the fact that the
>     syntax for URL substitution is a bit whack and the two keys
>     different, so the merge is actually a union-merge, and then the
>     result is probably just the first match (git:// sorts before
>     ssh://).

Right, the git-config backend just merges on a key-value basis. It isn't smart.

> Why was the syntax chosen backwards in this way? Why not have
>
>  [urlsubst "madduck:"]
>      replaceWith = ssh://git.madduck.net/madduck/
>
> or even better:
>
>  [url_regsubst]
>      somefreelychosenname = s|madduck:|ssh://git.madduck.net/madduck/|

I don't know, but it usually helps if you add the person who added the
feature to the CC-list.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: URL substitution and config file precedence
  2010-08-02 16:05 ` Ævar Arnfjörð Bjarmason
@ 2010-08-02 17:38   ` martin f krafft
  2010-08-02 17:46     ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 5+ messages in thread
From: martin f krafft @ 2010-08-02 17:38 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason, git discussion list

[-- Attachment #1: Type: text/plain, Size: 715 bytes --]

also sprach Ævar Arnfjörð Bjarmason <avarab@gmail.com> [2010.08.02.1805 +0200]:
> I don't know, but it usually helps if you add the person who added
> the feature to the CC-list.

Yeah, I didn't check. Does anyone happen to know who that was,
saving me the excursion into the history? I don't have Git cloned on
this laptop and I am on a really bad link. :(

Thanks,

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"da haben wir es also: eine kirchliche ordnung mit priesterschaft,
 theologie, kultus, sakrament;
 kurz, alles das, was jesus von nazareth bekämpft hatte..."
                                                 - friedrich nietzsche
 
spamtraps: madduck.bogus@madduck.net

[-- Attachment #2: Digital signature (see http://martin-krafft.net/gpg/) --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: URL substitution and config file precedence
  2010-08-02 17:38   ` martin f krafft
@ 2010-08-02 17:46     ` Ævar Arnfjörð Bjarmason
  0 siblings, 0 replies; 5+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2010-08-02 17:46 UTC (permalink / raw)
  To: martin f krafft; +Cc: git discussion list, Daniel Barkalow

On Mon, Aug 2, 2010 at 17:38, martin f krafft <madduck@madduck.net> wrote:
> also sprach Ævar Arnfjörð Bjarmason <avarab@gmail.com> [2010.08.02.1805 +0200]:
>> I don't know, but it usually helps if you add the person who added
>> the feature to the CC-list.
>
> Yeah, I didn't check. Does anyone happen to know who that was,
> saving me the excursion into the history? I don't have Git cloned on
> this laptop and I am on a really bad link. :(

Daniel Barkalow added it back in 2008. Adding him to the CC list.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: URL substitution and config file precedence
  2010-08-02 15:37 URL substitution and config file precedence martin f krafft
  2010-08-02 16:05 ` Ævar Arnfjörð Bjarmason
@ 2010-08-02 20:57 ` Jonathan Nieder
  1 sibling, 0 replies; 5+ messages in thread
From: Jonathan Nieder @ 2010-08-02 20:57 UTC (permalink / raw)
  To: martin f krafft
  Cc: git discussion list, Daniel Barkalow, Junio C Hamano,
	Ævar Arnfjörð Bjarmason

martin f krafft wrote:

>   % grep madduck: .git/config
>     url = madduck:pub/puppet/modules/git
> 
>   % grep -B1 nsteadOf /etc/gitconfig ~/.gitconfig
>   /etc/gitconfig-[url "git://git.madduck.net/madduck/"]
>   /etc/gitconfig: insteadOf = madduck:
>   --
>   /home/madduck/.gitconfig-[url "ssh://git.madduck.net/madduck/"]
>   /home/madduck/.gitconfig:       insteadOf = madduck:
>   /home/madduck/.gitconfig:       pushInsteadOf = git://git.madduck.net/madduck/
> 
>   % git push -v
>   Pushing to git://git.madduck.net/madduck/pub/puppet/modules/git
>   fatal: The remote end hung up unexpectedly
> 
> There seem to be two problems:
> 
>   1. the value from /etc/gitconfig seems to be preferred over the
>      one from ~/.gitconfig. I think this is due to the fact that the
>      syntax for URL substitution is a bit whack and the two keys
>      different, so the merge is actually a union-merge, and then the
>      result is probably just the first match (git:// sorts before
>      ssh://).

Almost.  I do not think there is any sorting involved.

It instead seems to be an unintended consequence of the "first match
wins" rule from v1.5.5-rc0~142^2 (url rewriting: take longest and
first match, 2008-02-24).  If we were starting over, I think it would
make more sense to make the _last_ match win, which would be closer to
how git configuration works in general.

> Why was the syntax chosen backwards in this way? Why not have
> 
>   [urlsubst "madduck:"]
>       replaceWith = ssh://git.madduck.net/madduck/

I wasn’t there, so I can’t complain.
http://thread.gmane.org/gmane.comp.version-control.git/74535/focus=74594

I think you’re right, that

	[fakeurl "madduck:"]
		url = git://git.madduck.net/madduck/
		pushurl = ssh://git.madduck.net/madduck/

or similar would be more convenient to work with than

	[url "ssh://git.madduck.net/madduck/"]
		pushinsteadof = madduck:
	[url "git://git.madduck.net/madduck/"]
		insteadof = madduck:

Jonathan

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-08-02 20:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-02 15:37 URL substitution and config file precedence martin f krafft
2010-08-02 16:05 ` Ævar Arnfjörð Bjarmason
2010-08-02 17:38   ` martin f krafft
2010-08-02 17:46     ` Ævar Arnfjörð Bjarmason
2010-08-02 20:57 ` Jonathan Nieder

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).