Merge branch 'vn/line-log-memcpy-size-fix' into maint
[gitweb.git] / t / t1400-update-ref.sh
index d4fb9770600df75d3162ffbc6c567b1ae152fccd..b0ffc0b5731dd746ed170604784287d3e48e9c30 100755 (executable)
@@ -8,23 +8,33 @@ test_description='Test git update-ref and basic ref logging'
 
 Z=$_z40
 
-test_expect_success setup '
+m=refs/heads/master
+n_dir=refs/heads/gu
+n=$n_dir/fixes
+outside=refs/foo
+bare=bare-repo
 
+create_test_commits ()
+{
+       prfx="$1"
        for name in A B C D E F
        do
                test_tick &&
                T=$(git write-tree) &&
                sha1=$(echo $name | git commit-tree $T) &&
-               eval $name=$sha1
+               eval $prfx$name=$sha1
        done
+}
 
+test_expect_success setup '
+       create_test_commits "" &&
+       mkdir $bare &&
+       cd $bare &&
+       git init --bare &&
+       create_test_commits "bare" &&
+       cd -
 '
 
-m=refs/heads/master
-n_dir=refs/heads/gu
-n=$n_dir/fixes
-outside=refs/foo
-
 test_expect_success \
        "create $m" \
        "git update-ref $m $A &&
@@ -93,6 +103,61 @@ test_expect_success 'update-ref creates reflogs with --create-reflog' '
        git reflog exists $outside
 '
 
+test_expect_success 'creates no reflog in bare repository' '
+       git -C $bare update-ref $m $bareA &&
+       git -C $bare rev-parse $bareA >expect &&
+       git -C $bare rev-parse $m >actual &&
+       test_cmp expect actual &&
+       test_must_fail git -C $bare reflog exists $m
+'
+
+test_expect_success 'core.logAllRefUpdates=true creates reflog in bare repository' '
+       test_when_finished "git -C $bare config --unset core.logAllRefUpdates && \
+               rm $bare/logs/$m" &&
+       git -C $bare config core.logAllRefUpdates true &&
+       git -C $bare update-ref $m $bareB &&
+       git -C $bare rev-parse $bareB >expect &&
+       git -C $bare rev-parse $m >actual &&
+       test_cmp expect actual &&
+       git -C $bare reflog exists $m
+'
+
+test_expect_success 'core.logAllRefUpdates=true does not create reflog by default' '
+       test_config core.logAllRefUpdates true &&
+       test_when_finished "git update-ref -d $outside" &&
+       git update-ref $outside $A &&
+       git rev-parse $A >expect &&
+       git rev-parse $outside >actual &&
+       test_cmp expect actual &&
+       test_must_fail git reflog exists $outside
+'
+
+test_expect_success 'core.logAllRefUpdates=always creates reflog by default' '
+       test_config core.logAllRefUpdates always &&
+       test_when_finished "git update-ref -d $outside" &&
+       git update-ref $outside $A &&
+       git rev-parse $A >expect &&
+       git rev-parse $outside >actual &&
+       test_cmp expect actual &&
+       git reflog exists $outside
+'
+
+test_expect_success 'core.logAllRefUpdates=always creates no reflog for ORIG_HEAD' '
+       test_config core.logAllRefUpdates always &&
+       git update-ref ORIG_HEAD $A &&
+       test_must_fail git reflog exists ORIG_HEAD
+'
+
+test_expect_success '--no-create-reflog overrides core.logAllRefUpdates=always' '
+       test_config core.logAllRefUpdates true &&
+       test_when_finished "git update-ref -d $outside" &&
+       git update-ref --no-create-reflog $outside $A &&
+       git rev-parse $A >expect &&
+       git rev-parse $outside >actual &&
+       test_cmp expect actual &&
+       test_must_fail git reflog exists $outside
+'
+
 test_expect_success \
        "create $m (by HEAD)" \
        "git update-ref HEAD $A &&
@@ -501,6 +566,7 @@ test_expect_success 'stdin does not create reflogs by default' '
 '
 
 test_expect_success 'stdin creates reflogs with --create-reflog' '
+       test_when_finished "git update-ref -d $outside" &&
        echo "create $outside $m" >stdin &&
        git update-ref --create-reflog --stdin <stdin &&
        git rev-parse $m >expect &&