@@ -7,70 +7,69 @@ test_description='Test the post-checkout hook.'
7
7
. ./test-lib.sh
8
8
9
9
test_expect_success setup '
10
- echo Data for commit0. >a &&
11
- echo Data for commit0. >b &&
12
- git update-index --add a &&
13
- git update-index --add b &&
14
- tree0=$(git write-tree) &&
15
- commit0=$(echo setup | git commit-tree $tree0) &&
16
- git update-ref refs/heads/master $commit0 &&
17
- git clone ./. clone1 &&
18
- git clone ./. clone2 &&
19
- GIT_DIR=clone2/.git git branch new2 &&
20
- echo Data for commit1. >clone2/b &&
21
- GIT_DIR=clone2/.git git add clone2/b &&
22
- GIT_DIR=clone2/.git git commit -m new2
10
+ test_commit one &&
11
+ test_commit two &&
12
+ test_commit rebase-on-me &&
13
+ git reset --hard HEAD^ &&
14
+ test_commit three three &&
15
+ mv .git/hooks-disabled .git/hooks
23
16
'
24
17
25
- for clone in 1 2; do
26
- cat > clone${clone} /.git/hooks/post-checkout << 'EOF '
18
+ cat > .git/hooks/post-checkout << 'EOF '
27
19
#!/bin/sh
28
- echo $@ > $GIT_DIR /post-checkout.args
20
+ echo $@ > .git /post-checkout.args
29
21
EOF
30
- chmod u+x clone${clone} /.git/hooks/post-checkout
31
- done
22
+ chmod u+x .git/hooks/post-checkout
32
23
33
24
test_expect_success ' post-checkout runs as expected ' '
34
- GIT_DIR=clone1/.git git checkout master &&
35
- test -e clone1/ .git/post-checkout.args
25
+ git checkout master &&
26
+ test -e .git/post-checkout.args
36
27
'
37
28
38
29
test_expect_success ' post-checkout receives the right arguments with HEAD unchanged ' '
39
- old=$(awk "{print \$1}" clone1/.git/post-checkout.args) &&
40
- new=$(awk "{print \$2}" clone1/.git/post-checkout.args) &&
41
- flag=$(awk "{print \$3}" clone1/.git/post-checkout.args) &&
30
+ read old new flag < .git/post-checkout.args &&
42
31
test $old = $new && test $flag = 1
43
32
'
44
33
45
34
test_expect_success ' post-checkout runs as expected ' '
46
- GIT_DIR=clone1/.git git checkout master &&
47
- test -e clone1/ .git/post-checkout.args
35
+ git checkout master &&
36
+ test -e .git/post-checkout.args
48
37
'
49
38
50
39
test_expect_success ' post-checkout args are correct with git checkout -b ' '
51
- GIT_DIR=clone1/.git git checkout -b new1 &&
52
- old=$(awk "{print \$1}" clone1/.git/post-checkout.args) &&
53
- new=$(awk "{print \$2}" clone1/.git/post-checkout.args) &&
54
- flag=$(awk "{print \$3}" clone1/.git/post-checkout.args) &&
40
+ git checkout -b new1 &&
41
+ read old new flag < .git/post-checkout.args &&
55
42
test $old = $new && test $flag = 1
56
43
'
57
44
58
45
test_expect_success ' post-checkout receives the right args with HEAD changed ' '
59
- GIT_DIR=clone2/.git git checkout new2 &&
60
- old=$(awk "{print \$1}" clone2/.git/post-checkout.args) &&
61
- new=$(awk "{print \$2}" clone2/.git/post-checkout.args) &&
62
- flag=$(awk "{print \$3}" clone2/.git/post-checkout.args) &&
46
+ git checkout two &&
47
+ read old new flag < .git/post-checkout.args &&
63
48
test $old != $new && test $flag = 1
64
49
'
65
50
66
51
test_expect_success ' post-checkout receives the right args when not switching branches ' '
67
- GIT_DIR=clone2/.git git checkout master b &&
68
- old=$(awk "{print \$1}" clone2/.git/post-checkout.args) &&
69
- new=$(awk "{print \$2}" clone2/.git/post-checkout.args) &&
70
- flag=$(awk "{print \$3}" clone2/.git/post-checkout.args) &&
52
+ git checkout master -- three &&
53
+ read old new flag < .git/post-checkout.args &&
71
54
test $old = $new && test $flag = 0
72
55
'
73
56
57
+ test_expect_success ' post-checkout is triggered on rebase' '
58
+ git checkout -b rebase-test master &&
59
+ rm -f .git/post-checkout.args &&
60
+ git rebase rebase-on-me &&
61
+ read old new flag < .git/post-checkout.args &&
62
+ test $old != $new && test $flag = 1
63
+ '
64
+
65
+ test_expect_success ' post-checkout is triggered on rebase with fast-forward' '
66
+ git checkout -b ff-rebase-test rebase-on-me^ &&
67
+ rm -f .git/post-checkout.args &&
68
+ git rebase rebase-on-me &&
69
+ read old new flag < .git/post-checkout.args &&
70
+ test $old != $new && test $flag = 1
71
+ '
72
+
74
73
if test " $( git config --bool core.filemode) " = true ; then
75
74
mkdir -p templates/hooks
76
75
cat > templates/hooks/post-checkout << 'EOF '
0 commit comments