Merge branch 'jh/maint-do-not-track-non-branches' into maint
* jh/maint-do-not-track-non-branches: branch/checkout --track: Ensure that upstream branch is indeed a branch
This commit is contained in:
commit
ac53196d9a
11
branch.c
11
branch.c
@ -175,9 +175,14 @@ void create_branch(const char *head,
|
||||
die("Cannot setup tracking information; starting point is not a branch.");
|
||||
break;
|
||||
case 1:
|
||||
/* Unique completion -- good, only if it is a real ref */
|
||||
if (explicit_tracking && !strcmp(real_ref, "HEAD"))
|
||||
die("Cannot setup tracking information; starting point is not a branch.");
|
||||
/* Unique completion -- good, only if it is a real branch */
|
||||
if (prefixcmp(real_ref, "refs/heads/") &&
|
||||
prefixcmp(real_ref, "refs/remotes/")) {
|
||||
if (explicit_tracking)
|
||||
die("Cannot setup tracking information; starting point is not a branch.");
|
||||
else
|
||||
real_ref = NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
die("Ambiguous object name: '%s'.", start_name);
|
||||
|
@ -223,6 +223,11 @@ test_expect_success \
|
||||
'branch from non-branch HEAD w/--track causes failure' \
|
||||
'test_must_fail git branch --track my10 HEAD^'
|
||||
|
||||
test_expect_success \
|
||||
'branch from tag w/--track causes failure' \
|
||||
'git tag foobar &&
|
||||
test_must_fail git branch --track my11 foobar'
|
||||
|
||||
# Keep this test last, as it changes the current branch
|
||||
cat >expect <<EOF
|
||||
0000000000000000000000000000000000000000 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 branch: Created from master
|
||||
@ -488,6 +493,15 @@ test_expect_success 'autosetuprebase always on an untracked remote branch' '
|
||||
test "z$(git config branch.myr20.rebase)" = z
|
||||
'
|
||||
|
||||
test_expect_success 'autosetuprebase always on detached HEAD' '
|
||||
git config branch.autosetupmerge always &&
|
||||
test_when_finished git checkout master &&
|
||||
git checkout HEAD^0 &&
|
||||
git branch my11 &&
|
||||
test -z "$(git config branch.my11.remote)" &&
|
||||
test -z "$(git config branch.my11.merge)"
|
||||
'
|
||||
|
||||
test_expect_success 'detect misconfigured autosetuprebase (bad value)' '
|
||||
git config branch.autosetuprebase garbage &&
|
||||
test_must_fail git branch
|
||||
|
@ -74,20 +74,20 @@ test_expect_success 'status' '
|
||||
grep "have 1 and 1 different" actual
|
||||
'
|
||||
|
||||
test_expect_success 'status when tracking lightweight tags' '
|
||||
test_expect_success 'fail to track lightweight tags' '
|
||||
git checkout master &&
|
||||
git tag light &&
|
||||
git branch --track lighttrack light >actual &&
|
||||
grep "set up to track" actual &&
|
||||
git checkout lighttrack
|
||||
test_must_fail git branch --track lighttrack light >actual &&
|
||||
test_must_fail grep "set up to track" actual &&
|
||||
test_must_fail git checkout lighttrack
|
||||
'
|
||||
|
||||
test_expect_success 'status when tracking annotated tags' '
|
||||
test_expect_success 'fail to track annotated tags' '
|
||||
git checkout master &&
|
||||
git tag -m heavy heavy &&
|
||||
git branch --track heavytrack heavy >actual &&
|
||||
grep "set up to track" actual &&
|
||||
git checkout heavytrack
|
||||
test_must_fail git branch --track heavytrack heavy >actual &&
|
||||
test_must_fail grep "set up to track" actual &&
|
||||
test_must_fail git checkout heavytrack
|
||||
'
|
||||
|
||||
test_expect_success 'setup tracking with branch --set-upstream on existing branch' '
|
||||
|
@ -408,6 +408,15 @@ test_expect_success 'checkout w/--track from non-branch HEAD fails' '
|
||||
test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"
|
||||
'
|
||||
|
||||
test_expect_success 'checkout w/--track from tag fails' '
|
||||
git checkout master^0 &&
|
||||
test_must_fail git symbolic-ref HEAD &&
|
||||
test_must_fail git checkout --track -b track frotz &&
|
||||
test_must_fail git rev-parse --verify track &&
|
||||
test_must_fail git symbolic-ref HEAD &&
|
||||
test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"
|
||||
'
|
||||
|
||||
test_expect_success 'detach a symbolic link HEAD' '
|
||||
git checkout master &&
|
||||
git config --bool core.prefersymlinkrefs yes &&
|
||||
@ -423,7 +432,6 @@ test_expect_success 'detach a symbolic link HEAD' '
|
||||
test_expect_success \
|
||||
'checkout with --track fakes a sensible -b <name>' '
|
||||
git update-ref refs/remotes/origin/koala/bear renamer &&
|
||||
git update-ref refs/new/koala/bear renamer &&
|
||||
|
||||
git checkout --track origin/koala/bear &&
|
||||
test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
|
||||
@ -439,12 +447,6 @@ test_expect_success \
|
||||
|
||||
git checkout --track remotes/origin/koala/bear &&
|
||||
test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
|
||||
test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&
|
||||
|
||||
git checkout master && git branch -D koala/bear &&
|
||||
|
||||
git checkout --track refs/new/koala/bear &&
|
||||
test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
|
||||
test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)"
|
||||
'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user