d42ec126aa
It is broken because of the tricks we have to play with lstat to get the bearable perfomance out of the call. Sadly, it disables access to Cygwin's executable attribute, which Windows filesystems do not have at all. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
89 lines
2.9 KiB
Bash
Executable File
89 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2006 Josh England
|
|
#
|
|
|
|
test_description='Test the post-checkout hook.'
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
echo Data for commit0. >a &&
|
|
echo Data for commit0. >b &&
|
|
git update-index --add a &&
|
|
git update-index --add b &&
|
|
tree0=$(git write-tree) &&
|
|
commit0=$(echo setup | git commit-tree $tree0) &&
|
|
git update-ref refs/heads/master $commit0 &&
|
|
git clone ./. clone1 &&
|
|
git clone ./. clone2 &&
|
|
GIT_DIR=clone2/.git git branch -a new2 &&
|
|
echo Data for commit1. >clone2/b &&
|
|
GIT_DIR=clone2/.git git add clone2/b &&
|
|
GIT_DIR=clone2/.git git commit -m new2
|
|
'
|
|
|
|
for clone in 1 2; do
|
|
cat >clone${clone}/.git/hooks/post-checkout <<'EOF'
|
|
#!/bin/sh
|
|
echo $@ > $GIT_DIR/post-checkout.args
|
|
EOF
|
|
chmod u+x clone${clone}/.git/hooks/post-checkout
|
|
done
|
|
|
|
test_expect_success 'post-checkout runs as expected ' '
|
|
GIT_DIR=clone1/.git git checkout master &&
|
|
test -e clone1/.git/post-checkout.args
|
|
'
|
|
|
|
test_expect_success 'post-checkout receives the right arguments with HEAD unchanged ' '
|
|
old=$(awk "{print \$1}" clone1/.git/post-checkout.args) &&
|
|
new=$(awk "{print \$2}" clone1/.git/post-checkout.args) &&
|
|
flag=$(awk "{print \$3}" clone1/.git/post-checkout.args) &&
|
|
test $old = $new -a $flag = 1
|
|
'
|
|
|
|
test_expect_success 'post-checkout runs as expected ' '
|
|
GIT_DIR=clone1/.git git checkout master &&
|
|
test -e clone1/.git/post-checkout.args
|
|
'
|
|
|
|
test_expect_success 'post-checkout args are correct with git checkout -b ' '
|
|
GIT_DIR=clone1/.git git checkout -b new1 &&
|
|
old=$(awk "{print \$1}" clone1/.git/post-checkout.args) &&
|
|
new=$(awk "{print \$2}" clone1/.git/post-checkout.args) &&
|
|
flag=$(awk "{print \$3}" clone1/.git/post-checkout.args) &&
|
|
test $old = $new -a $flag = 1
|
|
'
|
|
|
|
test_expect_success 'post-checkout receives the right args with HEAD changed ' '
|
|
GIT_DIR=clone2/.git git checkout new2 &&
|
|
old=$(awk "{print \$1}" clone2/.git/post-checkout.args) &&
|
|
new=$(awk "{print \$2}" clone2/.git/post-checkout.args) &&
|
|
flag=$(awk "{print \$3}" clone2/.git/post-checkout.args) &&
|
|
test $old != $new -a $flag = 1
|
|
'
|
|
|
|
test_expect_success 'post-checkout receives the right args when not switching branches ' '
|
|
GIT_DIR=clone2/.git git checkout master b &&
|
|
old=$(awk "{print \$1}" clone2/.git/post-checkout.args) &&
|
|
new=$(awk "{print \$2}" clone2/.git/post-checkout.args) &&
|
|
flag=$(awk "{print \$3}" clone2/.git/post-checkout.args) &&
|
|
test $old = $new -a $flag = 0
|
|
'
|
|
|
|
if test "$(git config --bool core.filemode)" = true; then
|
|
mkdir -p templates/hooks
|
|
cat >templates/hooks/post-checkout <<'EOF'
|
|
#!/bin/sh
|
|
echo $@ > $GIT_DIR/post-checkout.args
|
|
EOF
|
|
chmod +x templates/hooks/post-checkout
|
|
|
|
test_expect_success 'post-checkout hook is triggered by clone' '
|
|
git clone --template=templates . clone3 &&
|
|
test -f clone3/.git/post-checkout.args
|
|
'
|
|
fi
|
|
|
|
test_done
|