Skip to content

Commit

Permalink
push: do not use potentially ambiguous default refspec
Browse files Browse the repository at this point in the history
When the user does the lazy "git push" with no parameters with
push.default set to either "upstream", "simple" or "current",
we internally generated a refspec that has the current branch name
on the source side and used it to push.

However, the branch name (say "test") may be an ambiguous refname in
the context of the source repository---there may be a tag with the
same name, for example.  This would trigger an unnecessary error
without any fault on the end-user's side.

Be explicit and give a full refname as the source side to avoid the
ambiguity.  The destination side when pushing with the "current"
sent only the name of the branch and forcing the receiving end to
guess, which is the same issue.  Be explicit there as well.

Reported-by: Kannan Goundan <kannan@cakoose.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Oct 29, 2016
1 parent 0b65a8d commit eef2bda
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions builtin/push.c
Expand Up @@ -194,15 +194,18 @@ static void setup_push_upstream(struct remote *remote, struct branch *branch,
die_push_simple(branch, remote);
}

strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src);
strbuf_addf(&refspec, "%s:%s", branch->refname, branch->merge[0]->src);
add_refspec(refspec.buf);
}

static void setup_push_current(struct remote *remote, struct branch *branch)
{
struct strbuf refspec = STRBUF_INIT;

if (!branch)
die(_(message_detached_head_die), remote->name);
add_refspec(branch->name);
strbuf_addf(&refspec, "%s:%s", branch->refname, branch->refname);
add_refspec(refspec.buf);
}

static int is_workflow_triangular(struct remote *remote)
Expand Down

0 comments on commit eef2bda

Please sign in to comment.