|
|
|
@ -48,17 +48,17 @@ test_expect_success "fail to delete $m with stale ref" '
|
|
|
|
|
test $B = "$(git show-ref -s --verify $m)"
|
|
|
|
|
'
|
|
|
|
|
test_expect_success "delete $m" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref -d $m $B &&
|
|
|
|
|
test_path_is_missing .git/$m
|
|
|
|
|
test_must_fail git show-ref --verify -q $m
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success "delete $m without oldvalue verification" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref $m $A &&
|
|
|
|
|
test $A = $(git show-ref -s --verify $m) &&
|
|
|
|
|
git update-ref -d $m &&
|
|
|
|
|
test_path_is_missing .git/$m
|
|
|
|
|
test_must_fail git show-ref --verify -q $m
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success "fail to create $n" '
|
|
|
|
@ -80,26 +80,26 @@ test_expect_success "fail to delete $m (by HEAD) with stale ref" '
|
|
|
|
|
test $B = $(git show-ref -s --verify $m)
|
|
|
|
|
'
|
|
|
|
|
test_expect_success "delete $m (by HEAD)" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref -d HEAD $B &&
|
|
|
|
|
test_path_is_missing .git/$m
|
|
|
|
|
test_must_fail git show-ref --verify -q $m
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success "deleting current branch adds message to HEAD's log" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref $m $A &&
|
|
|
|
|
git symbolic-ref HEAD $m &&
|
|
|
|
|
git update-ref -m delete-$m -d $m &&
|
|
|
|
|
test_path_is_missing .git/$m &&
|
|
|
|
|
test_must_fail git show-ref --verify -q $m &&
|
|
|
|
|
grep "delete-$m$" .git/logs/HEAD
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success "deleting by HEAD adds message to HEAD's log" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref $m $A &&
|
|
|
|
|
git symbolic-ref HEAD $m &&
|
|
|
|
|
git update-ref -m delete-by-head -d HEAD &&
|
|
|
|
|
test_path_is_missing .git/$m &&
|
|
|
|
|
test_must_fail git show-ref --verify -q $m &&
|
|
|
|
|
grep "delete-by-head$" .git/logs/HEAD
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
@ -188,30 +188,36 @@ test_expect_success "move $m (by HEAD)" '
|
|
|
|
|
test $B = $(git show-ref -s --verify $m)
|
|
|
|
|
'
|
|
|
|
|
test_expect_success "delete $m (by HEAD) should remove both packed and loose $m" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
git update-ref -d HEAD $B &&
|
|
|
|
|
! grep "$m" .git/packed-refs &&
|
|
|
|
|
test_path_is_missing .git/$m
|
|
|
|
|
test_must_fail git show-ref --verify -q $m
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
cp -f .git/HEAD .git/HEAD.orig
|
|
|
|
|
test_expect_success 'delete symref without dereference' '
|
|
|
|
|
test_when_finished "cp -f .git/HEAD.orig .git/HEAD" &&
|
|
|
|
|
git update-ref --no-deref -d HEAD &&
|
|
|
|
|
test_path_is_missing .git/HEAD
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'delete symref without dereference when the referred ref is packed' '
|
|
|
|
|
test_when_finished "cp -f .git/HEAD.orig .git/HEAD" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
echo foo >foo.c &&
|
|
|
|
|
git add foo.c &&
|
|
|
|
|
git commit -m foo &&
|
|
|
|
|
git pack-refs --all &&
|
|
|
|
|
git update-ref --no-deref -d HEAD &&
|
|
|
|
|
test_path_is_missing .git/HEAD
|
|
|
|
|
git symbolic-ref SYMREF $m &&
|
|
|
|
|
git update-ref --no-deref -d SYMREF &&
|
|
|
|
|
git show-ref --verify -q $m &&
|
|
|
|
|
test_must_fail git show-ref --verify -q SYMREF &&
|
|
|
|
|
test_must_fail git symbolic-ref SYMREF
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
git update-ref -d $m
|
|
|
|
|
test_expect_success 'delete symref without dereference when the referred ref is packed' '
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
echo foo >foo.c &&
|
|
|
|
|
git add foo.c &&
|
|
|
|
|
git commit -m foo &&
|
|
|
|
|
git symbolic-ref SYMREF $m &&
|
|
|
|
|
git pack-refs --all &&
|
|
|
|
|
git update-ref --no-deref -d SYMREF &&
|
|
|
|
|
git show-ref --verify -q $m &&
|
|
|
|
|
test_must_fail git show-ref --verify -q SYMREF &&
|
|
|
|
|
test_must_fail git symbolic-ref SYMREF
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'update-ref -d is not confused by self-reference' '
|
|
|
|
|
git symbolic-ref refs/heads/self refs/heads/self &&
|
|
|
|
@ -226,25 +232,25 @@ test_expect_success 'update-ref --no-deref -d can delete self-reference' '
|
|
|
|
|
test_when_finished "rm -f .git/refs/heads/self" &&
|
|
|
|
|
test_path_is_file .git/refs/heads/self &&
|
|
|
|
|
git update-ref --no-deref -d refs/heads/self &&
|
|
|
|
|
test_path_is_missing .git/refs/heads/self
|
|
|
|
|
test_must_fail git show-ref --verify -q refs/heads/self
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'update-ref --no-deref -d can delete reference to bad ref' '
|
|
|
|
|
>.git/refs/heads/bad &&
|
|
|
|
|
test_when_finished "rm -f .git/refs/heads/bad" &&
|
|
|
|
|
git symbolic-ref refs/heads/ref-to-bad refs/heads/bad &&
|
|
|
|
|
test_when_finished "rm -f .git/refs/heads/ref-to-bad" &&
|
|
|
|
|
test_when_finished "git update-ref -d refs/heads/ref-to-bad" &&
|
|
|
|
|
test_path_is_file .git/refs/heads/ref-to-bad &&
|
|
|
|
|
git update-ref --no-deref -d refs/heads/ref-to-bad &&
|
|
|
|
|
test_path_is_missing .git/refs/heads/ref-to-bad
|
|
|
|
|
test_must_fail git show-ref --verify -q refs/heads/ref-to-bad
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success '(not) create HEAD with old sha1' '
|
|
|
|
|
test_must_fail git update-ref HEAD $A $B
|
|
|
|
|
'
|
|
|
|
|
test_expect_success "(not) prior created .git/$m" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_path_is_missing .git/$m
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
test_must_fail git show-ref --verify -q $m
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'create HEAD' '
|
|
|
|
@ -254,7 +260,7 @@ test_expect_success '(not) change HEAD with wrong SHA1' '
|
|
|
|
|
test_must_fail git update-ref HEAD $B $Z
|
|
|
|
|
'
|
|
|
|
|
test_expect_success "(not) changed .git/$m" '
|
|
|
|
|
test_when_finished "rm -f .git/$m" &&
|
|
|
|
|
test_when_finished "git update-ref -d $m" &&
|
|
|
|
|
! test $B = $(git show-ref -s --verify $m)
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
@ -284,8 +290,8 @@ test_expect_success 'empty directory removal' '
|
|
|
|
|
test_path_is_file .git/refs/heads/d1/d2/r1 &&
|
|
|
|
|
test_path_is_file .git/logs/refs/heads/d1/d2/r1 &&
|
|
|
|
|
git branch -d d1/d2/r1 &&
|
|
|
|
|
test_path_is_missing .git/refs/heads/d1/d2 &&
|
|
|
|
|
test_path_is_missing .git/logs/refs/heads/d1/d2 &&
|
|
|
|
|
test_must_fail git show-ref --verify -q refs/heads/d1/d2 &&
|
|
|
|
|
test_must_fail git show-ref --verify -q logs/refs/heads/d1/d2 &&
|
|
|
|
|
test_path_is_file .git/refs/heads/d1/r2 &&
|
|
|
|
|
test_path_is_file .git/logs/refs/heads/d1/r2
|
|
|
|
|
'
|
|
|
|
@ -298,8 +304,8 @@ test_expect_success 'symref empty directory removal' '
|
|
|
|
|
test_path_is_file .git/refs/heads/e1/e2/r1 &&
|
|
|
|
|
test_path_is_file .git/logs/refs/heads/e1/e2/r1 &&
|
|
|
|
|
git update-ref -d HEAD &&
|
|
|
|
|
test_path_is_missing .git/refs/heads/e1/e2 &&
|
|
|
|
|
test_path_is_missing .git/logs/refs/heads/e1/e2 &&
|
|
|
|
|
test_must_fail git show-ref --verify -q refs/heads/e1/e2 &&
|
|
|
|
|
test_must_fail git show-ref --verify -q logs/refs/heads/e1/e2 &&
|
|
|
|
|
test_path_is_file .git/refs/heads/e1/r2 &&
|
|
|
|
|
test_path_is_file .git/logs/refs/heads/e1/r2 &&
|
|
|
|
|
test_path_is_file .git/logs/HEAD
|
|
|
|
@ -1388,7 +1394,8 @@ test_expect_success 'handle per-worktree refs in refs/bisect' '
|
|
|
|
|
git rev-parse refs/bisect/something >../worktree-head &&
|
|
|
|
|
git for-each-ref | grep refs/bisect/something
|
|
|
|
|
) &&
|
|
|
|
|
test_path_is_missing .git/refs/bisect &&
|
|
|
|
|
git show-ref >actual &&
|
|
|
|
|
! grep 'refs/bisect' actual &&
|
|
|
|
|
test_must_fail git rev-parse refs/bisect/something &&
|
|
|
|
|
git update-ref refs/bisect/something HEAD &&
|
|
|
|
|
git rev-parse refs/bisect/something >main-head &&
|
|
|
|
@ -1500,7 +1507,7 @@ test_expect_success 'transaction can handle abort' '
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start abort >expect &&
|
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
test_path_is_missing .git/$b
|
|
|
|
|
test_must_fail git show-ref --verify -q $b
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction aborts by default' '
|
|
|
|
@ -1511,7 +1518,7 @@ test_expect_success 'transaction aborts by default' '
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start >expect &&
|
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
test_path_is_missing .git/$b
|
|
|
|
|
test_must_fail git show-ref --verify -q $b
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction with prepare aborts by default' '
|
|
|
|
@ -1523,7 +1530,68 @@ test_expect_success 'transaction with prepare aborts by default' '
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start prepare >expect &&
|
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
test_path_is_missing .git/$b
|
|
|
|
|
test_must_fail git show-ref --verify -q $b
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction can commit multiple times' '
|
|
|
|
|
cat >stdin <<-EOF &&
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/branch-1 $A
|
|
|
|
|
commit
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/branch-2 $B
|
|
|
|
|
commit
|
|
|
|
|
EOF
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start commit start commit >expect &&
|
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
echo "$A" >expect &&
|
|
|
|
|
git rev-parse refs/heads/branch-1 >actual &&
|
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
echo "$B" >expect &&
|
|
|
|
|
git rev-parse refs/heads/branch-2 >actual &&
|
|
|
|
|
test_cmp expect actual
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction can create and delete' '
|
|
|
|
|
cat >stdin <<-EOF &&
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/create-and-delete $A
|
|
|
|
|
commit
|
|
|
|
|
start
|
|
|
|
|
delete refs/heads/create-and-delete $A
|
|
|
|
|
commit
|
|
|
|
|
EOF
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start commit start commit >expect &&
|
|
|
|
|
test_must_fail git show-ref --verify refs/heads/create-and-delete
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction can commit after abort' '
|
|
|
|
|
cat >stdin <<-EOF &&
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/abort $A
|
|
|
|
|
abort
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/abort $A
|
|
|
|
|
commit
|
|
|
|
|
EOF
|
|
|
|
|
git update-ref --stdin <stdin >actual &&
|
|
|
|
|
printf "%s: ok\n" start abort start commit >expect &&
|
|
|
|
|
echo "$A" >expect &&
|
|
|
|
|
git rev-parse refs/heads/abort >actual &&
|
|
|
|
|
test_cmp expect actual
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_expect_success 'transaction cannot restart ongoing transaction' '
|
|
|
|
|
cat >stdin <<-EOF &&
|
|
|
|
|
start
|
|
|
|
|
create refs/heads/restart $A
|
|
|
|
|
start
|
|
|
|
|
commit
|
|
|
|
|
EOF
|
|
|
|
|
test_must_fail git update-ref --stdin <stdin >actual &&
|
|
|
|
|
test_must_fail git show-ref --verify refs/heads/restart
|
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
test_done
|
|
|
|
|