All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/2] Add url.<base>.pushInsteadOf: URL rewriting for push only
Date: Mon, 7 Sep 2009 01:19:52 -0700	[thread overview]
Message-ID: <20090907081952.GA21550@feather> (raw)
In-Reply-To: <7vljkr2ntd.fsf@alter.siamese.dyndns.org>

On Mon, Sep 07, 2009 at 12:53:18AM -0700, Junio C Hamano wrote:
> Josh Triplett <josh@joshtriplett.org> writes:
> > This configuration option allows systematically rewriting fetch-only
> > URLs to push-capable URLs when used with push.  For instance:
> >
> > [url "ssh://example.org/"]
> >     pushInsteadOf = "git://example.org/"
> >
> > This will allow clones of "git://example.org/path/to/repo" to
> > subsequently push to "ssh://example.org/path/to/repo", without manually
> > configuring pushurl for that remote.
> 
> Nice.

Thanks.

> > @@ -435,12 +449,13 @@ static void alias_all_urls(void)
> >  	for (i = 0; i < remotes_nr; i++) {
> >  		if (!remotes[i])
> >  			continue;
> > -		for (j = 0; j < remotes[i]->url_nr; j++) {
> > -			remotes[i]->url[j] = alias_url(remotes[i]->url[j], &rewrites);
> > -		}
> >  		for (j = 0; j < remotes[i]->pushurl_nr; j++) {
> >  			remotes[i]->pushurl[j] = alias_url(remotes[i]->pushurl[j], &rewrites);
> >  		}
> > +		for (j = 0; j < remotes[i]->url_nr; j++) {
> > +			remotes[i]->url[j] = alias_url(remotes[i]->url[j], &rewrites);
> > +			add_pushurl_alias(remotes[i], remotes[i]->url[j]);
> > +		}
> 
> Even if you have URL but not pushURL, now you get a corresponding pushURL
> for free by just adding pushinsteadof mapping that covers the URL without
> having to configue pushURL for each of them.

Yes, exactly.

> What happens if you already had a pair of concrete url and pushurl defined
> for one of your repositories (say git://git.kernel.org/pub/scm/git/git.git
> for fetch, ssh://x.kernel.org/pub/scm/git/git.git for push) at a site, and
> then upon seeing this new feature, added a pushinsteadof pattern that also
> covers the URL side of that pair (e.g. everything in git://git.kernel.org/
> is mapped to x.kernel.org:/ namespsace)?
> 
> Do you end up pushing to both (e.g. ssh://x.kernel.org/pub/scm/git/git.git
> and x.kernel.org:/pub/scm/git/git.git), or in such a case, the pushURL you
> gave explicitly prevents the pushinsteadof to give unexpected duplicates?

You get a duplicate:

~$ grep -B1 steadOf .gitconfig
[url "ssh://joshtriplett.org/"]
        pushInsteadOf="git://joshtriplett.org/"
~$ grep -B1 url .git/config
[remote "origin"]
        url = git://joshtriplett.org/git/home.git
        pushurl = ssh://joshtriplett.org/git/home.git
~$ ~/src/git/git push
Everything up-to-date
Everything up-to-date

Initially, that behavior seemed pretty reasonable to me; nothing else in
the remotes handling attempts to remove duplicates, and they seem
harmless enough and easily resolved by removing one or the other.  Now
that I think about it, though, an explicit pushurl should definitely
disable pushInsteadOf's implicit pushurls.  If you explicitly configure
a *different* pushurl for a remote, you may not *want* the default
pushurl that corresponds to your url.  For instance, consider what would
happen if you configure url to point to the main public repository and
pushurl to point to a private repository.  In this case, you definitely
don't want "git push" to helpfully push to the public repository as
well; if you do, you can easily enough add a second pushurl for that.

I can easily change the patch to make an explicit pushurl disable
pushInsteadOf.  Expect v2 shortly.

- Josh Triplett

      reply	other threads:[~2009-09-07  8:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-07  6:59 [PATCH 0/2] Add url.<base>.pushInsteadOf: URL rewriting for push only Josh Triplett
2009-09-07  7:00 ` [PATCH 1/2] Wrap rewrite globals in a struct in preparation for adding another set Josh Triplett
2009-09-07  7:00 ` [PATCH 2/2] Add url.<base>.pushInsteadOf: URL rewriting for push only Josh Triplett
2009-09-07  7:53   ` Junio C Hamano
2009-09-07  8:19     ` Josh Triplett [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090907081952.GA21550@feather \
    --to=josh@joshtriplett.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.