Document receive.denyNonFastforwards
[gitweb.git] / t / t5400-send-pack.sh
index 2c142dfeb04ce49520f71095e7585e0620bc89a8..8afb89971752fe4a91b9b7c62b4b0a6b69a8272b 100755 (executable)
@@ -8,6 +8,9 @@ test_description='See why rewinding head breaks send-pack
 '
 . ./test-lib.sh
 
+touch cpio-test
+test_expect_success 'working cpio' 'echo cpio-test | cpio -o > /dev/null'
+
 cnt='1'
 test_expect_success setup '
        tree=$(git-write-tree) &&
@@ -20,12 +23,12 @@ test_expect_success setup '
            commit=$(echo "Commit #$i" | git-commit-tree $tree -p $parent) &&
            parent=$commit || return 1
        done &&
-       echo "$commit" >.git/HEAD &&
-       git clone -l ./. victim &&
+       git-update-ref HEAD "$commit" &&
+       git-clone -l ./. victim &&
        cd victim &&
-       git log &&
+       git-log &&
        cd .. &&
-       echo $zero >.git/HEAD &&
+       git-update-ref HEAD "$zero" &&
        parent=$zero &&
        for i in $cnt
        do
@@ -33,14 +36,22 @@ test_expect_success setup '
            commit=$(echo "Rebase #$i" | git-commit-tree $tree -p $parent) &&
            parent=$commit || return 1
        done &&
-       echo "$commit" >.git/HEAD &&
+       git-update-ref HEAD "$commit" &&
        echo Rebase &&
-       git log'
+       git-log'
 
 test_expect_success \
         'pushing rewound head should not barf but require --force' ' 
        # should not fail but refuse to update.
-       git-send-pack ./victim/.git/ master &&
+       if git-send-pack ./victim/.git/ master
+       then
+               # now it should fail with Pasky patch
+               echo >&2 Gaah, it should have failed.
+               false
+       else
+               echo >&2 Thanks, it correctly failed.
+               true
+       fi &&
        if cmp victim/.git/refs/heads/master .git/refs/heads/master
        then
                # should have been left as it was!
@@ -53,4 +64,18 @@ test_expect_success \
        cmp victim/.git/refs/heads/master .git/refs/heads/master
 '
 
+unset GIT_CONFIG GIT_CONFIG_LOCAL
+HOME=`pwd`/no-such-directory
+export HOME ;# this way we force the victim/.git/config to be used.
+
+test_expect_success \
+        'pushing with --force should be denied with denyNonFastforwards' '
+       cd victim &&
+       git-repo-config receive.denyNonFastforwards true &&
+       cd .. &&
+       git-update-ref refs/heads/master master^ &&
+       git-send-pack --force ./victim/.git/ master &&
+       ! diff -u .git/refs/heads/master victim/.git/refs/heads/master
+'
+
 test_done