Hi Anastas,
On Tue, 16 Dec 2014, Anastas Dancha wrote:
> When ~/.gitconfig contains an alias (i.e. myremote)
> and you are adding a new remote using the same name
> for remote, Git will refuse to add the remote with
> the same name as one of the aliases, even though the
> remote with such name is not setup for current repo.
Just to make sure we're on the same page... you are talking about
[remote "myremote"]
not
[alias]
myremote = ...
yes? If so, please avoid using the term "alias"...
Further, I assume that your .gitconfig lists the "myremote" without a URL?
Also:
> - if (remote && (remote->url_nr > 1 || strcmp(name, remote->url[0]) ||
> - remote->fetch_refspec_nr))
> - die(_("remote %s already exists."), name);
> + if (remote && (remote->url_nr > 1 || remote->fetch_refspec_nr))
> + die(_("remote %s %s already exists."), name, url);
The real problem here is that strcmp() is performed even if url_nr == 0,
*and* that it compares the name – instead of the url – to the remote's URL.
That is incorrect, so the correct fix would be:
- if (remote && (remote->url_nr > 1 || strcmp(name, remote->url[0]) ||
+ if (remote && (remote->url_nr > 1 ||
+ (remote->url_nr == 1 && strcmp(url, remote->url[0])) ||
remote->fetch_refspec_nr))
die(_("remote %s already exists."), name);
In other words, we would still verify that there is no existing remote,
even if that remote was declared in ~/.gitconfig. However, if a remote
exists without any URL, or if it has a single URL that matches the
provided one, and there are no fetch refspecs, *then* there is nothing to
complain about and we continue.
Ciao,
Johannes