From: Thomas Gummerer <t.gummerer@gmail.com>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, Johannes.Schindelin@gmx.de, gitster@pobox.com
Subject: Re: [PATCH 4/4] remote: use remote_is_configured() for add and rename
Date: Mon, 15 Feb 2016 21:43:51 +0100 [thread overview]
Message-ID: <20160215204351.GE13775@hank> (raw)
In-Reply-To: <20160215183334.GH26443@sigill.intra.peff.net>
On 02/15, Jeff King wrote:
> On Mon, Feb 15, 2016 at 06:42:30PM +0100, Thomas Gummerer wrote:
>
> > Both remote add and remote rename use a slightly different hand-rolled
> > check if the remote exits. The hand-rolled check may have some subtle
> > cases in which it might fail to detect when a remote already exists.
> > One such case was fixed in fb86e32 ("git remote: allow adding remotes
> > agreeing with url.<...>.insteadOf"). Another case is when a remote is
> > configured as follows:
> >
> > [remote "foo"]
> > vcs = bar
> >
> > If we try to run `git remote add foo bar` with the above remote
> > configuration, git segfaults. This change fixes it.
> >
> > In addition, git remote rename $existing foo with the configuration for
> > foo as above silently succeeds, even though foo already exists,
> > modifying its configuration. With this patch it fails with "remote foo
> > already exists".
>
> Checking is_configured() certainly sounds like a better test, but...
>
> > diff --git a/builtin/remote.c b/builtin/remote.c
> > index 981c487..bd57f1b 100644
> > --- a/builtin/remote.c
> > +++ b/builtin/remote.c
> > @@ -186,10 +186,7 @@ static int add(int argc, const char **argv)
> > url = argv[1];
> >
> > remote = remote_get(name);
> > - if (remote && (remote->url_nr > 1 ||
> > - (strcmp(name, remote->url[0]) &&
> > - strcmp(url, remote->url[0])) ||
> > - remote->fetch_refspec_nr))
> > + if (remote_is_configured(remote))
> > die(_("remote %s already exists."), name);
>
> This original is quite confusing. I thought at first that there was
> perhaps something going on with allowing repeated re-configuration of
> the same remote, as long as some parameters matched. I.e., I am
> wondering if there is a case here that does _not_ segfault, that we
> would be breaking.
>
> But reading over fb86e32dcc, I think I have convinced myself that it was
> merely an ad-hoc check for "is_configured", and using that function is a
> better replacement.
It took me a while too to convince myself there is nothing strange
going on. But I could neither find anything in the history, nor could
I think of any case that we could break.
Thanks for your review!
> -Peff
next prev parent reply other threads:[~2016-02-15 20:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-15 17:42 [PATCH 0/4] git remote improvements Thomas Gummerer
2016-02-15 17:42 ` [PATCH 1/4] remote: use skip_prefix Thomas Gummerer
2016-02-15 18:18 ` Jeff King
2016-02-15 18:35 ` Eric Sunshine
2016-02-15 18:36 ` Jeff King
2016-02-15 20:37 ` Thomas Gummerer
2016-02-15 17:42 ` [PATCH 2/4] remote: simplify remote_is_configured() Thomas Gummerer
2016-02-15 18:21 ` Jeff King
2016-02-15 20:38 ` Thomas Gummerer
2016-02-15 21:37 ` Junio C Hamano
2016-02-15 17:42 ` [PATCH 3/4] remote: actually check if remote exits Thomas Gummerer
2016-02-15 18:23 ` Jeff King
2016-02-15 17:42 ` [PATCH 4/4] remote: use remote_is_configured() for add and rename Thomas Gummerer
2016-02-15 18:33 ` Jeff King
2016-02-15 20:43 ` Thomas Gummerer [this message]
2016-02-17 13:54 ` Johannes Schindelin
2016-02-17 14:24 ` Thomas Gummerer
2016-02-17 16:20 ` Johannes Schindelin
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=20160215204351.GE13775@hank \
--to=t.gummerer@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/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.