]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t5510-fetch.sh
Merge branch 'tb/midx-write-cleanup'
[thirdparty/git.git] / t / t5510-fetch.sh
index 33d34d5ae9e953e29f6dba8badb16922072cd76c..3b3991ab8678a57fce3ad371e37900fb3c6c426a 100755 (executable)
@@ -518,7 +518,7 @@ test_expect_success 'fetch with a non-applying branch.<name>.merge' '
 test_expect_success 'fetch from GIT URL with a non-applying branch.<name>.merge [1]' '
        one_head=$(cd one && git rev-parse HEAD) &&
        this_head=$(git rev-parse HEAD) &&
-       git update-ref -d FETCH_HEAD &&
+       rm .git/FETCH_HEAD &&
        git fetch one &&
        test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
        test $this_head = "$(git rev-parse --verify HEAD)"
@@ -530,7 +530,7 @@ test_expect_success 'fetch from GIT URL with a non-applying branch.<name>.merge
        one_ref=$(cd one && git symbolic-ref HEAD) &&
        git config branch.main.remote blub &&
        git config branch.main.merge "$one_ref" &&
-       git update-ref -d FETCH_HEAD &&
+       rm .git/FETCH_HEAD &&
        git fetch one &&
        test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
        test $this_head = "$(git rev-parse --verify HEAD)"
@@ -540,7 +540,7 @@ test_expect_success 'fetch from GIT URL with a non-applying branch.<name>.merge
 # the merge spec does not match the branch the remote HEAD points to
 test_expect_success 'fetch from GIT URL with a non-applying branch.<name>.merge [3]' '
        git config branch.main.merge "${one_ref}_not" &&
-       git update-ref -d FETCH_HEAD &&
+       rm .git/FETCH_HEAD &&
        git fetch one &&
        test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
        test $this_head = "$(git rev-parse --verify HEAD)"
@@ -1091,6 +1091,22 @@ test_expect_success 'branchname D/F conflict resolved by --prune' '
        test_cmp expect actual
 '
 
+test_expect_success 'branchname D/F conflict rejected with targeted error message' '
+       git clone . df-conflict-error &&
+       git branch dir_conflict &&
+       (
+               cd df-conflict-error &&
+               git update-ref refs/remotes/origin/dir_conflict/file HEAD &&
+               test_must_fail git fetch 2>err &&
+               test_grep "error: some local refs could not be updated; try running" err &&
+               test_grep " ${SQ}git remote prune origin${SQ} to remove any old, conflicting branches" err &&
+               git pack-refs --all &&
+               test_must_fail git fetch 2>err-packed &&
+               test_grep "error: some local refs could not be updated; try running" err-packed &&
+               test_grep " ${SQ}git remote prune origin${SQ} to remove any old, conflicting branches" err-packed
+       )
+'
+
 test_expect_success 'fetching a one-level ref works' '
        test_commit extra &&
        git reset --hard HEAD^ &&
@@ -1252,6 +1268,30 @@ EOF
        test_cmp fatal-expect fatal-actual
 '
 
+test_expect_success SYMLINKS 'clone does not get confused by a D/F conflict' '
+       git init df-conflict &&
+       (
+               cd df-conflict &&
+               ln -s .git a &&
+               git add a &&
+               test_tick &&
+               git commit -m symlink &&
+               test_commit a- &&
+               rm a &&
+               mkdir -p a/hooks &&
+               write_script a/hooks/post-checkout <<-EOF &&
+               echo WHOOPSIE >&2
+               echo whoopsie >"$TRASH_DIRECTORY"/whoops
+               EOF
+               git add a/hooks/post-checkout &&
+               test_tick &&
+               git commit -m post-checkout
+       ) &&
+       git clone df-conflict clone 2>err &&
+       test_grep ! WHOOPS err &&
+       test_path_is_missing whoops
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd