Merge branch 'xq/credential-osxkeychain'
[gitweb.git] / t / t2024-checkout-dwim.sh
index 1452bea6b1ed2af06d6ce5b57cb3a4b63d029f06..dee55e428f07eeac9c2d2c329ff2c1aca3f4ea98 100755 (executable)
@@ -24,6 +24,7 @@ test_branch_upstream () {
 }
 
 test_expect_success 'setup' '
+       test_commit my_master &&
        git init repo_a &&
        (
                cd repo_a &&
@@ -58,7 +59,7 @@ test_expect_success 'checkout of non-existing branch fails' '
        test_branch master
 '
 
-test_expect_success 'checkout of branch from multiple remotes fails' '
+test_expect_success 'checkout of branch from multiple remotes fails #1' '
        git checkout -B master &&
        test_might_fail git branch -D foo &&
 
@@ -96,4 +97,71 @@ test_expect_success '--no-guess suppresses branch auto-vivification' '
        test_branch master
 '
 
+test_expect_success 'setup more remotes with unconventional refspecs' '
+       git checkout -B master &&
+       git init repo_c &&
+       (
+               cd repo_c &&
+               test_commit c_master &&
+               git checkout -b bar &&
+               test_commit c_bar
+               git checkout -b spam &&
+               test_commit c_spam
+       ) &&
+       git init repo_d &&
+       (
+               cd repo_d &&
+               test_commit d_master &&
+               git checkout -b baz &&
+               test_commit f_baz
+               git checkout -b eggs &&
+               test_commit c_eggs
+       ) &&
+       git remote add repo_c repo_c &&
+       git config remote.repo_c.fetch \
+               "+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&
+       git remote add repo_d repo_d &&
+       git config remote.repo_d.fetch \
+               "+refs/heads/*:refs/repo_d/*" &&
+       git fetch --all
+'
+
+test_expect_success 'checkout of branch from multiple remotes fails #2' '
+       git checkout -B master &&
+       test_might_fail git branch -D bar &&
+
+       test_must_fail git checkout bar &&
+       test_must_fail git rev-parse --verify refs/heads/bar &&
+       test_branch master
+'
+
+test_expect_success 'checkout of branch from multiple remotes fails #3' '
+       git checkout -B master &&
+       test_might_fail git branch -D baz &&
+
+       test_must_fail git checkout baz &&
+       test_must_fail git rev-parse --verify refs/heads/baz &&
+       test_branch master
+'
+
+test_expect_success 'checkout of branch from a single remote succeeds #3' '
+       git checkout -B master &&
+       test_might_fail git branch -D spam &&
+
+       git checkout spam &&
+       test_branch spam &&
+       test_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&
+       test_branch_upstream spam repo_c spam
+'
+
+test_expect_success 'checkout of branch from a single remote succeeds #4' '
+       git checkout -B master &&
+       test_might_fail git branch -D eggs &&
+
+       git checkout eggs &&
+       test_branch eggs &&
+       test_cmp_rev refs/repo_d/eggs HEAD &&
+       test_branch_upstream eggs repo_d eggs
+'
+
 test_done