]>
Commit | Line | Data |
---|---|---|
67541597 PS |
1 | #!/bin/sh |
2 | ||
3 | test_description='reference transaction hooks' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success setup ' | |
8 | mkdir -p .git/hooks && | |
9 | test_commit PRE && | |
10 | test_commit POST && | |
11 | POST_OID=$(git rev-parse POST) | |
12 | ' | |
13 | ||
14 | test_expect_success 'hook allows updating ref if successful' ' | |
15 | test_when_finished "rm .git/hooks/reference-transaction" && | |
16 | git reset --hard PRE && | |
17 | write_script .git/hooks/reference-transaction <<-\EOF && | |
18 | echo "$*" >>actual | |
19 | EOF | |
20 | cat >expect <<-EOF && | |
21 | prepared | |
22 | committed | |
23 | EOF | |
24 | git update-ref HEAD POST && | |
25 | test_cmp expect actual | |
26 | ' | |
27 | ||
28 | test_expect_success 'hook aborts updating ref in prepared state' ' | |
29 | test_when_finished "rm .git/hooks/reference-transaction" && | |
30 | git reset --hard PRE && | |
31 | write_script .git/hooks/reference-transaction <<-\EOF && | |
32 | if test "$1" = prepared | |
33 | then | |
34 | exit 1 | |
35 | fi | |
36 | EOF | |
37 | test_must_fail git update-ref HEAD POST 2>err && | |
38 | test_i18ngrep "ref updates aborted by hook" err | |
39 | ' | |
40 | ||
41 | test_expect_success 'hook gets all queued updates in prepared state' ' | |
42 | test_when_finished "rm .git/hooks/reference-transaction actual" && | |
43 | git reset --hard PRE && | |
44 | write_script .git/hooks/reference-transaction <<-\EOF && | |
45 | if test "$1" = prepared | |
46 | then | |
47 | while read -r line | |
48 | do | |
49 | printf "%s\n" "$line" | |
50 | done >actual | |
51 | fi | |
52 | EOF | |
53 | cat >expect <<-EOF && | |
54 | $ZERO_OID $POST_OID HEAD | |
55 | $ZERO_OID $POST_OID refs/heads/master | |
56 | EOF | |
57 | git update-ref HEAD POST <<-EOF && | |
58 | update HEAD $ZERO_OID $POST_OID | |
59 | update refs/heads/master $ZERO_OID $POST_OID | |
60 | EOF | |
61 | test_cmp expect actual | |
62 | ' | |
63 | ||
64 | test_expect_success 'hook gets all queued updates in committed state' ' | |
65 | test_when_finished "rm .git/hooks/reference-transaction actual" && | |
66 | git reset --hard PRE && | |
67 | write_script .git/hooks/reference-transaction <<-\EOF && | |
68 | if test "$1" = committed | |
69 | then | |
70 | while read -r line | |
71 | do | |
72 | printf "%s\n" "$line" | |
73 | done >actual | |
74 | fi | |
75 | EOF | |
76 | cat >expect <<-EOF && | |
77 | $ZERO_OID $POST_OID HEAD | |
78 | $ZERO_OID $POST_OID refs/heads/master | |
79 | EOF | |
80 | git update-ref HEAD POST && | |
81 | test_cmp expect actual | |
82 | ' | |
83 | ||
84 | test_expect_success 'hook gets all queued updates in aborted state' ' | |
85 | test_when_finished "rm .git/hooks/reference-transaction actual" && | |
86 | git reset --hard PRE && | |
87 | write_script .git/hooks/reference-transaction <<-\EOF && | |
88 | if test "$1" = aborted | |
89 | then | |
90 | while read -r line | |
91 | do | |
92 | printf "%s\n" "$line" | |
93 | done >actual | |
94 | fi | |
95 | EOF | |
96 | cat >expect <<-EOF && | |
97 | $ZERO_OID $POST_OID HEAD | |
98 | $ZERO_OID $POST_OID refs/heads/master | |
99 | EOF | |
100 | git update-ref --stdin <<-EOF && | |
101 | start | |
102 | update HEAD POST $ZERO_OID | |
103 | update refs/heads/master POST $ZERO_OID | |
104 | abort | |
105 | EOF | |
106 | test_cmp expect actual | |
107 | ' | |
108 | ||
109 | test_done |