mirror of
https://github.com/git/git.git
synced 2024-11-01 23:07:55 +01:00
push: do not let configured foreign-vcs permanently clobbered
Recently, 6f48d39
(clone: delay cloning until after remote HEAD checking,
2012-01-16) tried to record if a remote helper needs to be called after
parsing the remote when transport_get() is called, by overwriting the
field meant to store the configured remote helper name in the remote
structure.
This is OK when a remote represents a single remote repository, but fails
miserably when pushing to locations with multiple URLs, like this:
$ cat .git/config
[remote "origin"]
url = https://code.google.com/p/git-htmldocs/
url = github.com:gitster/git-htmldocs.git
push = refs/heads/master:refs/heads/master
$ git push
The second url that is supposed to use the git-over-ssh transport
mistakenly use https:// and fails with:
error: Couldn't resolve host 'github.com:gitster' while accessing
github.com:gitster/git-htmldocs.git/info/refs
fatal: HTTP request failed
The right solution would probably be to dedicate a separate field to store
the detected external helper to be used, which is valid only during a
single use of transport until it is disconnected, instead of overwriting
foreign_vcs field, but in the meantime, this band-aid should suffice.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2857093ba1
commit
dad0b3d8e5
1 changed files with 2 additions and 0 deletions
|
@ -204,11 +204,13 @@ static int do_push(const char *repo, int flags)
|
|||
url_nr = remote->url_nr;
|
||||
}
|
||||
if (url_nr) {
|
||||
const char *configured_foreign_vcs = remote->foreign_vcs;
|
||||
for (i = 0; i < url_nr; i++) {
|
||||
struct transport *transport =
|
||||
transport_get(remote, url[i]);
|
||||
if (push_with_options(transport, flags))
|
||||
errs++;
|
||||
remote->foreign_vcs = configured_foreign_vcs;
|
||||
}
|
||||
} else {
|
||||
struct transport *transport =
|
||||
|
|
Loading…
Reference in a new issue