1
0
mirror of https://github.com/git/git.git synced 2024-09-24 11:31:54 +02:00

Merge branch 'jc/push-default-explicit'

A lazy "git push" without refspec did not internally use a fully
specified refspec to perform 'current', 'simple', or 'upstream'
push, causing unnecessary "ambiguous ref" errors.

* jc/push-default-explicit:
  push: test pushing ambiguously named branches
  push: do not use potentially ambiguous default refspec
This commit is contained in:
Junio C Hamano 2016-12-27 00:11:40 -08:00
commit 6c18dd4dc3
2 changed files with 15 additions and 2 deletions

View File

@ -194,15 +194,18 @@ static void setup_push_upstream(struct remote *remote, struct branch *branch,
die_push_simple(branch, remote); 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); add_refspec(refspec.buf);
} }
static void setup_push_current(struct remote *remote, struct branch *branch) static void setup_push_current(struct remote *remote, struct branch *branch)
{ {
struct strbuf refspec = STRBUF_INIT;
if (!branch) if (!branch)
die(_(message_detached_head_die), remote->name); 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) static int is_workflow_triangular(struct remote *remote)

View File

@ -98,6 +98,16 @@ test_expect_success 'push from/to new branch with upstream, matching and simple'
test_push_failure upstream test_push_failure upstream
' '
test_expect_success 'push ambiguously named branch with upstream, matching and simple' '
git checkout -b ambiguous &&
test_config branch.ambiguous.remote parent1 &&
test_config branch.ambiguous.merge refs/heads/ambiguous &&
git tag ambiguous &&
test_push_success simple ambiguous &&
test_push_success matching ambiguous &&
test_push_success upstream ambiguous
'
test_expect_success 'push from/to new branch with current creates remote branch' ' test_expect_success 'push from/to new branch with current creates remote branch' '
test_config branch.new-branch.remote repo1 && test_config branch.new-branch.remote repo1 &&
git checkout new-branch && git checkout new-branch &&