Commit dad0b3d8 authored by Junio C Hamano's avatar Junio C Hamano

push: do not let configured foreign-vcs permanently clobbered

Recently, 6f48d39f (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

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 =
        url =
        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 '' while accessing
    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: default avatarJunio C Hamano <>
Signed-off-by: default avatarJunio C Hamano <>
parent 2857093b
......@@ -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))
remote->foreign_vcs = configured_foreign_vcs;
} else {
struct transport *transport =
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment