You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.5 KiB
109 lines
2.5 KiB
#!/bin/sh |
|
|
|
test_description='reference transaction hooks' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
mkdir -p .git/hooks && |
|
test_commit PRE && |
|
test_commit POST && |
|
POST_OID=$(git rev-parse POST) |
|
' |
|
|
|
test_expect_success 'hook allows updating ref if successful' ' |
|
test_when_finished "rm .git/hooks/reference-transaction" && |
|
git reset --hard PRE && |
|
write_script .git/hooks/reference-transaction <<-\EOF && |
|
echo "$*" >>actual |
|
EOF |
|
cat >expect <<-EOF && |
|
prepared |
|
committed |
|
EOF |
|
git update-ref HEAD POST && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'hook aborts updating ref in prepared state' ' |
|
test_when_finished "rm .git/hooks/reference-transaction" && |
|
git reset --hard PRE && |
|
write_script .git/hooks/reference-transaction <<-\EOF && |
|
if test "$1" = prepared |
|
then |
|
exit 1 |
|
fi |
|
EOF |
|
test_must_fail git update-ref HEAD POST 2>err && |
|
test_i18ngrep "ref updates aborted by hook" err |
|
' |
|
|
|
test_expect_success 'hook gets all queued updates in prepared state' ' |
|
test_when_finished "rm .git/hooks/reference-transaction actual" && |
|
git reset --hard PRE && |
|
write_script .git/hooks/reference-transaction <<-\EOF && |
|
if test "$1" = prepared |
|
then |
|
while read -r line |
|
do |
|
printf "%s\n" "$line" |
|
done >actual |
|
fi |
|
EOF |
|
cat >expect <<-EOF && |
|
$ZERO_OID $POST_OID HEAD |
|
$ZERO_OID $POST_OID refs/heads/master |
|
EOF |
|
git update-ref HEAD POST <<-EOF && |
|
update HEAD $ZERO_OID $POST_OID |
|
update refs/heads/master $ZERO_OID $POST_OID |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'hook gets all queued updates in committed state' ' |
|
test_when_finished "rm .git/hooks/reference-transaction actual" && |
|
git reset --hard PRE && |
|
write_script .git/hooks/reference-transaction <<-\EOF && |
|
if test "$1" = committed |
|
then |
|
while read -r line |
|
do |
|
printf "%s\n" "$line" |
|
done >actual |
|
fi |
|
EOF |
|
cat >expect <<-EOF && |
|
$ZERO_OID $POST_OID HEAD |
|
$ZERO_OID $POST_OID refs/heads/master |
|
EOF |
|
git update-ref HEAD POST && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'hook gets all queued updates in aborted state' ' |
|
test_when_finished "rm .git/hooks/reference-transaction actual" && |
|
git reset --hard PRE && |
|
write_script .git/hooks/reference-transaction <<-\EOF && |
|
if test "$1" = aborted |
|
then |
|
while read -r line |
|
do |
|
printf "%s\n" "$line" |
|
done >actual |
|
fi |
|
EOF |
|
cat >expect <<-EOF && |
|
$ZERO_OID $POST_OID HEAD |
|
$ZERO_OID $POST_OID refs/heads/master |
|
EOF |
|
git update-ref --stdin <<-EOF && |
|
start |
|
update HEAD POST $ZERO_OID |
|
update refs/heads/master POST $ZERO_OID |
|
abort |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_done
|
|
|