mirror of
https://github.com/git/git.git
synced 2024-11-16 14:04:52 +01:00
4017761fd8
Junio noticed that switching on autosetupmerge unilaterally started cluttering the config for local branches. That is not the original intention of branch.autosetupmerge, which was meant purely for convenience when branching off of remote branches, but that semantics got lost somewhere. If you still want that "new" behavior, you can switch branch.autosetupmerge to the value "all". Otherwise, it is interpreted as a boolean, which triggers setting up defaults _only_ when branching off of a remote branch, i.e. the originally intended behavior. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
204 lines
7.2 KiB
Bash
Executable file
204 lines
7.2 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Amos Waterland
|
|
#
|
|
|
|
test_description='git branch --foo should not create bogus branch
|
|
|
|
This test runs git branch --help and checks that the argument is properly
|
|
handled. Specifically, that a bogus branch is not created.
|
|
'
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success \
|
|
'prepare a trivial repository' \
|
|
'echo Hello > A &&
|
|
git update-index --add A &&
|
|
git-commit -m "Initial commit." &&
|
|
HEAD=$(git rev-parse --verify HEAD)'
|
|
|
|
test_expect_failure \
|
|
'git branch --help should not have created a bogus branch' \
|
|
'git branch --help </dev/null >/dev/null 2>/dev/null || :
|
|
test -f .git/refs/heads/--help'
|
|
|
|
test_expect_success \
|
|
'git branch abc should create a branch' \
|
|
'git branch abc && test -f .git/refs/heads/abc'
|
|
|
|
test_expect_success \
|
|
'git branch a/b/c should create a branch' \
|
|
'git branch a/b/c && test -f .git/refs/heads/a/b/c'
|
|
|
|
cat >expect <<EOF
|
|
0000000000000000000000000000000000000000 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 branch: Created from master
|
|
EOF
|
|
test_expect_success \
|
|
'git branch -l d/e/f should create a branch and a log' \
|
|
'GIT_COMMITTER_DATE="2005-05-26 23:30" \
|
|
git branch -l d/e/f &&
|
|
test -f .git/refs/heads/d/e/f &&
|
|
test -f .git/logs/refs/heads/d/e/f &&
|
|
diff expect .git/logs/refs/heads/d/e/f'
|
|
|
|
test_expect_success \
|
|
'git branch -d d/e/f should delete a branch and a log' \
|
|
'git branch -d d/e/f &&
|
|
test ! -f .git/refs/heads/d/e/f &&
|
|
test ! -f .git/logs/refs/heads/d/e/f'
|
|
|
|
test_expect_success \
|
|
'git branch j/k should work after branch j has been deleted' \
|
|
'git branch j &&
|
|
git branch -d j &&
|
|
git branch j/k'
|
|
|
|
test_expect_success \
|
|
'git branch l should work after branch l/m has been deleted' \
|
|
'git branch l/m &&
|
|
git branch -d l/m &&
|
|
git branch l'
|
|
|
|
test_expect_success \
|
|
'git branch -m m m/m should work' \
|
|
'git branch -l m &&
|
|
git branch -m m m/m &&
|
|
test -f .git/logs/refs/heads/m/m'
|
|
|
|
test_expect_success \
|
|
'git branch -m n/n n should work' \
|
|
'git branch -l n/n &&
|
|
git branch -m n/n n
|
|
test -f .git/logs/refs/heads/n'
|
|
|
|
test_expect_failure \
|
|
'git branch -m o/o o should fail when o/p exists' \
|
|
'git branch o/o &&
|
|
git branch o/p &&
|
|
git branch -m o/o o'
|
|
|
|
test_expect_failure \
|
|
'git branch -m q r/q should fail when r exists' \
|
|
'git branch q &&
|
|
git branch r &&
|
|
git branch -m q r/q'
|
|
|
|
mv .git/config .git/config-saved
|
|
|
|
test_expect_success 'git branch -m q q2 without config should succeed' '
|
|
git branch -m q q2 &&
|
|
git branch -m q2 q
|
|
'
|
|
|
|
mv .git/config-saved .git/config
|
|
|
|
git config branch.s/s.dummy Hello
|
|
|
|
test_expect_success \
|
|
'git branch -m s/s s should work when s/t is deleted' \
|
|
'git branch -l s/s &&
|
|
test -f .git/logs/refs/heads/s/s &&
|
|
git branch -l s/t &&
|
|
test -f .git/logs/refs/heads/s/t &&
|
|
git branch -d s/t &&
|
|
git branch -m s/s s &&
|
|
test -f .git/logs/refs/heads/s'
|
|
|
|
test_expect_success 'config information was renamed, too' \
|
|
"test $(git config branch.s.dummy) = Hello &&
|
|
! git config branch.s/s/dummy"
|
|
|
|
test_expect_failure \
|
|
'git branch -m u v should fail when the reflog for u is a symlink' \
|
|
'git branch -l u &&
|
|
mv .git/logs/refs/heads/u real-u &&
|
|
ln -s real-u .git/logs/refs/heads/u &&
|
|
git branch -m u v'
|
|
|
|
test_expect_success 'test tracking setup via --track' \
|
|
'git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
|
|
(git show-ref -q refs/remotes/local/master || git-fetch local) &&
|
|
git branch --track my1 local/master &&
|
|
test $(git config branch.my1.remote) = local &&
|
|
test $(git config branch.my1.merge) = refs/heads/master'
|
|
|
|
test_expect_success 'test tracking setup (non-wildcard, matching)' \
|
|
'git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/master:refs/remotes/local/master &&
|
|
(git show-ref -q refs/remotes/local/master || git-fetch local) &&
|
|
git branch --track my4 local/master &&
|
|
test $(git config branch.my4.remote) = local &&
|
|
test $(git config branch.my4.merge) = refs/heads/master'
|
|
|
|
test_expect_success 'test tracking setup (non-wildcard, not matching)' \
|
|
'git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/s:refs/remotes/local/s &&
|
|
(git show-ref -q refs/remotes/local/master || git-fetch local) &&
|
|
git branch --track my5 local/master &&
|
|
! test "$(git config branch.my5.remote)" = local &&
|
|
! test "$(git config branch.my5.merge)" = refs/heads/master'
|
|
|
|
test_expect_success 'test tracking setup via config' \
|
|
'git config branch.autosetupmerge true &&
|
|
git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
|
|
(git show-ref -q refs/remotes/local/master || git-fetch local) &&
|
|
git branch my3 local/master &&
|
|
test $(git config branch.my3.remote) = local &&
|
|
test $(git config branch.my3.merge) = refs/heads/master'
|
|
|
|
test_expect_success 'autosetupmerge = all' '
|
|
git config branch.autosetupmerge true &&
|
|
git branch all1 master &&
|
|
test -z "$(git config branch.all1.merge)" &&
|
|
git config branch.autosetupmerge all &&
|
|
git branch all2 master &&
|
|
test $(git config branch.all2.merge) = refs/heads/master
|
|
'
|
|
|
|
test_expect_success 'test overriding tracking setup via --no-track' \
|
|
'git config branch.autosetupmerge true &&
|
|
git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
|
|
(git show-ref -q refs/remotes/local/master || git-fetch local) &&
|
|
git branch --no-track my2 local/master &&
|
|
git config branch.autosetupmerge false &&
|
|
! test "$(git config branch.my2.remote)" = local &&
|
|
! test "$(git config branch.my2.merge)" = refs/heads/master'
|
|
|
|
test_expect_success 'test local tracking setup' \
|
|
'git branch --track my6 s &&
|
|
test $(git config branch.my6.remote) = . &&
|
|
test $(git config branch.my6.merge) = refs/heads/s'
|
|
|
|
test_expect_success 'test tracking setup via --track but deeper' \
|
|
'git config remote.local.url . &&
|
|
git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
|
|
(git show-ref -q refs/remotes/local/o/o || git-fetch local) &&
|
|
git branch --track my7 local/o/o &&
|
|
test "$(git config branch.my7.remote)" = local &&
|
|
test "$(git config branch.my7.merge)" = refs/heads/o/o'
|
|
|
|
test_expect_success 'test deleting branch deletes branch config' \
|
|
'git branch -d my7 &&
|
|
test "$(git config branch.my7.remote)" = "" &&
|
|
test "$(git config branch.my7.merge)" = ""'
|
|
|
|
test_expect_success 'test deleting branch without config' \
|
|
'git branch my7 s &&
|
|
test "$(git branch -d my7 2>&1)" = "Deleted branch my7."'
|
|
|
|
# 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
|
|
EOF
|
|
test_expect_success \
|
|
'git checkout -b g/h/i -l should create a branch and a log' \
|
|
'GIT_COMMITTER_DATE="2005-05-26 23:30" \
|
|
git-checkout -b g/h/i -l master &&
|
|
test -f .git/refs/heads/g/h/i &&
|
|
test -f .git/logs/refs/heads/g/h/i &&
|
|
diff expect .git/logs/refs/heads/g/h/i'
|
|
|
|
test_done
|