Imported Upstream version 2.26.0
[platform/upstream/git.git] / t / t2024-checkout-dwim.sh
index fa0718c..accfa9a 100755 (executable)
@@ -37,7 +37,9 @@ test_expect_success 'setup' '
                git checkout -b foo &&
                test_commit a_foo &&
                git checkout -b bar &&
-               test_commit a_bar
+               test_commit a_bar &&
+               git checkout -b ambiguous_branch_and_file &&
+               test_commit a_ambiguous_branch_and_file
        ) &&
        git init repo_b &&
        (
@@ -46,7 +48,9 @@ test_expect_success 'setup' '
                git checkout -b foo &&
                test_commit b_foo &&
                git checkout -b baz &&
-               test_commit b_baz
+               test_commit b_baz &&
+               git checkout -b ambiguous_branch_and_file &&
+               test_commit b_ambiguous_branch_and_file
        ) &&
        git remote add repo_a repo_a &&
        git remote add repo_b repo_b &&
@@ -75,6 +79,26 @@ test_expect_success 'checkout of branch from multiple remotes fails #1' '
        test_branch master
 '
 
+test_expect_success 'when arg matches multiple remotes, do not fallback to interpreting as pathspec' '
+       # create a file with name matching remote branch name
+       git checkout -b t_ambiguous_branch_and_file &&
+       >ambiguous_branch_and_file &&
+       git add ambiguous_branch_and_file &&
+       git commit -m "ambiguous_branch_and_file" &&
+
+       # modify file to verify that it will not be touched by checkout
+       test_when_finished "git checkout -- ambiguous_branch_and_file" &&
+       echo "file contents" >ambiguous_branch_and_file &&
+       cp ambiguous_branch_and_file expect &&
+
+       test_must_fail git checkout ambiguous_branch_and_file 2>err &&
+
+       test_i18ngrep "matched multiple (2) remote tracking branches" err &&
+
+       # file must not be altered
+       test_cmp expect ambiguous_branch_and_file
+'
+
 test_expect_success 'checkout of branch from multiple remotes fails with advice' '
        git checkout -B master &&
        test_might_fail git branch -D foo &&