git-commit-vandalism/t/t5400-send-pack.sh
Junio C Hamano 026aa93818 Revert "prune: --grace=time"
This reverts commit 9b088c4e39.

Protecting 'mature' objects does not make it any safer.  We should
admit that git-prune is inherently unsafe when run in parallel with
other operations without involving unwarranted locking overhead,
and with the latest git, even rebase and reset would not immediately
create crufts anyway.
2007-01-21 21:29:57 -08:00

117 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#
test_description='See why rewinding head breaks send-pack
'
. ./test-lib.sh
cnt=64
test_expect_success setup '
test_tick &&
mkdir mozart mozart/is &&
echo "Commit #0" >mozart/is/pink &&
git-update-index --add mozart/is/pink &&
tree=$(git-write-tree) &&
commit=$(echo "Commit #0" | git-commit-tree $tree) &&
zero=$commit &&
parent=$zero &&
i=0 &&
while test $i -le $cnt
do
i=$(($i+1)) &&
test_tick &&
echo "Commit #$i" >mozart/is/pink &&
git-update-index --add mozart/is/pink &&
tree=$(git-write-tree) &&
commit=$(echo "Commit #$i" | git-commit-tree $tree -p $parent) &&
git-update-ref refs/tags/commit$i $commit &&
parent=$commit || return 1
done &&
git-update-ref HEAD "$commit" &&
git-clone ./. victim &&
cd victim &&
git-log &&
cd .. &&
git-update-ref HEAD "$zero" &&
parent=$zero &&
i=0 &&
while test $i -le $cnt
do
i=$(($i+1)) &&
test_tick &&
echo "Rebase #$i" >mozart/is/pink &&
git-update-index --add mozart/is/pink &&
tree=$(git-write-tree) &&
commit=$(echo "Rebase #$i" | git-commit-tree $tree -p $parent) &&
git-update-ref refs/tags/rebase$i $commit &&
parent=$commit || return 1
done &&
git-update-ref HEAD "$commit" &&
echo Rebase &&
git-log'
test_expect_success 'pack the source repository' '
git repack -a -d &&
git prune
'
test_expect_success 'pack the destination repository' '
cd victim &&
git repack -a -d &&
git prune &&
cd ..
'
test_expect_success \
'pushing rewound head should not barf but require --force' '
# should not fail but refuse to update.
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!
false
else
true
fi &&
# this should update
git-send-pack --force ./victim/.git/ master &&
cmp victim/.git/refs/heads/master .git/refs/heads/master
'
test_expect_success \
'push can be used to delete a ref' '
cd victim &&
git branch extra master &&
cd .. &&
test -f victim/.git/refs/heads/extra &&
git-send-pack ./victim/.git/ :extra master &&
! test -f victim/.git/refs/heads/extra
'
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