ref_transaction_commit(): fix atomicity and avoid fd exhaustion
[gitweb.git] / t / t5510-fetch.sh
index b212f83db7514a0d687cf9884e123a9b8dad7ae0..0ba9db08847255d28e3e185d18b68703fb0755dc 100755 (executable)
@@ -124,7 +124,7 @@ test_expect_success 'fetch --prune handles overlapping refspecs' '
        git rev-parse origin/master &&
        git rev-parse origin/pr/42 &&
 
-       git config --unset-all remote.origin.fetch
+       git config --unset-all remote.origin.fetch &&
        git config remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
        git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* &&
 
@@ -321,7 +321,7 @@ test_expect_success 'fetch via rsync' '
        mkdir rsynced &&
        (cd rsynced &&
         git init --bare &&
-        git fetch "rsync:$(pwd)/../.git" master:refs/heads/master &&
+        git fetch "rsync:../.git" master:refs/heads/master &&
         git gc --prune &&
         test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
         git fsck --full)
@@ -332,7 +332,7 @@ test_expect_success 'push via rsync' '
        (cd rsynced2 &&
         git init) &&
        (cd rsynced &&
-        git push "rsync:$(pwd)/../rsynced2/.git" master) &&
+        git push "rsync:../rsynced2/.git" master) &&
        (cd rsynced2 &&
         git gc --prune &&
         test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
@@ -343,7 +343,7 @@ test_expect_success 'push via rsync' '
        mkdir rsynced3 &&
        (cd rsynced3 &&
         git init) &&
-       git push --all "rsync:$(pwd)/rsynced3/.git" &&
+       git push --all "rsync:rsynced3/.git" &&
        (cd rsynced3 &&
         test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
         git fsck --full)
@@ -447,6 +447,43 @@ test_expect_success 'explicit pull should update tracking' '
        )
 '
 
+test_expect_success 'explicit --refmap is allowed only with command-line refspec' '
+       cd "$D" &&
+       (
+               cd three &&
+               test_must_fail git fetch --refmap="*:refs/remotes/none/*"
+       )
+'
+
+test_expect_success 'explicit --refmap option overrides remote.*.fetch' '
+       cd "$D" &&
+       git branch -f side &&
+       (
+               cd three &&
+               git update-ref refs/remotes/origin/master base-origin-master &&
+               o=$(git rev-parse --verify refs/remotes/origin/master) &&
+               git fetch --refmap="refs/heads/*:refs/remotes/other/*" origin master &&
+               n=$(git rev-parse --verify refs/remotes/origin/master) &&
+               test "$o" = "$n" &&
+               test_must_fail git rev-parse --verify refs/remotes/origin/side &&
+               git rev-parse --verify refs/remotes/other/master
+       )
+'
+
+test_expect_success 'explicitly empty --refmap option disables remote.*.fetch' '
+       cd "$D" &&
+       git branch -f side &&
+       (
+               cd three &&
+               git update-ref refs/remotes/origin/master base-origin-master &&
+               o=$(git rev-parse --verify refs/remotes/origin/master) &&
+               git fetch --refmap="" origin master &&
+               n=$(git rev-parse --verify refs/remotes/origin/master) &&
+               test "$o" = "$n" &&
+               test_must_fail git rev-parse --verify refs/remotes/origin/side
+       )
+'
+
 test_expect_success 'configured fetch updates tracking' '
 
        cd "$D" &&
@@ -559,7 +596,7 @@ test_configured_prune () {
                        test_unconfig remote.origin.prune &&
                        git fetch &&
                        git rev-parse --verify refs/remotes/origin/newbranch
-               )
+               ) &&
 
                # now remove it
                git branch -d newbranch &&