]>
Commit | Line | Data |
---|---|---|
d70b4a8f NS |
1 | #!/bin/sh |
2 | ||
3 | test_description='git rebase with its hook(s)' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success setup ' | |
8 | echo hello >file && | |
9 | git add file && | |
10 | test_tick && | |
11 | git commit -m initial && | |
12 | echo goodbye >file && | |
13 | git add file && | |
14 | test_tick && | |
15 | git commit -m second && | |
16 | git checkout -b side HEAD^ && | |
17 | echo world >git && | |
18 | git add git && | |
19 | test_tick && | |
20 | git commit -m side && | |
21 | git checkout master && | |
22 | git log --pretty=oneline --abbrev-commit --graph --all && | |
23 | git branch test side | |
24 | ' | |
25 | ||
26 | test_expect_success 'rebase' ' | |
27 | git checkout test && | |
28 | git reset --hard side && | |
29 | git rebase master && | |
30 | test "z$(cat git)" = zworld | |
31 | ' | |
32 | ||
33 | test_expect_success 'rebase -i' ' | |
34 | git checkout test && | |
35 | git reset --hard side && | |
36 | EDITOR=true git rebase -i master && | |
37 | test "z$(cat git)" = zworld | |
38 | ' | |
39 | ||
40 | test_expect_success 'setup pre-rebase hook' ' | |
41 | mkdir -p .git/hooks && | |
42 | cat >.git/hooks/pre-rebase <<EOF && | |
43 | #!$SHELL_PATH | |
44 | echo "\$1,\$2" >.git/PRE-REBASE-INPUT | |
45 | EOF | |
46 | chmod +x .git/hooks/pre-rebase | |
47 | ' | |
48 | ||
49 | test_expect_success 'pre-rebase hook gets correct input (1)' ' | |
50 | git checkout test && | |
51 | git reset --hard side && | |
52 | git rebase master && | |
53 | test "z$(cat git)" = zworld && | |
54 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster, | |
55 | ||
56 | ' | |
57 | ||
58 | test_expect_success 'pre-rebase hook gets correct input (2)' ' | |
59 | git checkout test && | |
60 | git reset --hard side && | |
61 | git rebase master test && | |
62 | test "z$(cat git)" = zworld && | |
63 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test | |
64 | ' | |
65 | ||
66 | test_expect_success 'pre-rebase hook gets correct input (3)' ' | |
67 | git checkout test && | |
68 | git reset --hard side && | |
69 | git checkout master && | |
70 | git rebase master test && | |
71 | test "z$(cat git)" = zworld && | |
72 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test | |
73 | ' | |
74 | ||
75 | test_expect_success 'pre-rebase hook gets correct input (4)' ' | |
76 | git checkout test && | |
77 | git reset --hard side && | |
78 | EDITOR=true git rebase -i master && | |
79 | test "z$(cat git)" = zworld && | |
80 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster, | |
81 | ||
82 | ' | |
83 | ||
84 | test_expect_success 'pre-rebase hook gets correct input (5)' ' | |
85 | git checkout test && | |
86 | git reset --hard side && | |
87 | EDITOR=true git rebase -i master test && | |
88 | test "z$(cat git)" = zworld && | |
89 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test | |
90 | ' | |
91 | ||
92 | test_expect_success 'pre-rebase hook gets correct input (6)' ' | |
93 | git checkout test && | |
94 | git reset --hard side && | |
95 | git checkout master && | |
96 | EDITOR=true git rebase -i master test && | |
97 | test "z$(cat git)" = zworld && | |
98 | test "z$(cat .git/PRE-REBASE-INPUT)" = zmaster,test | |
99 | ' | |
100 | ||
101 | test_expect_success 'setup pre-rebase hook that fails' ' | |
102 | mkdir -p .git/hooks && | |
103 | cat >.git/hooks/pre-rebase <<EOF && | |
104 | #!$SHELL_PATH | |
105 | false | |
106 | EOF | |
107 | chmod +x .git/hooks/pre-rebase | |
108 | ' | |
109 | ||
110 | test_expect_success 'pre-rebase hook stops rebase (1)' ' | |
111 | git checkout test && | |
112 | git reset --hard side && | |
113 | test_must_fail git rebase master && | |
114 | test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && | |
115 | test 0 = $(git rev-list HEAD...side | wc -l) | |
116 | ' | |
117 | ||
118 | test_expect_success 'pre-rebase hook stops rebase (2)' ' | |
119 | git checkout test && | |
120 | git reset --hard side && | |
512477b1 | 121 | test_must_fail env EDITOR=: git rebase -i master && |
d70b4a8f NS |
122 | test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && |
123 | test 0 = $(git rev-list HEAD...side | wc -l) | |
124 | ' | |
125 | ||
c4427656 NS |
126 | test_expect_success 'rebase --no-verify overrides pre-rebase (1)' ' |
127 | git checkout test && | |
128 | git reset --hard side && | |
129 | git rebase --no-verify master && | |
130 | test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && | |
131 | test "z$(cat git)" = zworld | |
132 | ' | |
133 | ||
134 | test_expect_success 'rebase --no-verify overrides pre-rebase (2)' ' | |
135 | git checkout test && | |
136 | git reset --hard side && | |
137 | EDITOR=true git rebase --no-verify -i master && | |
138 | test "z$(git symbolic-ref HEAD)" = zrefs/heads/test && | |
139 | test "z$(cat git)" = zworld | |
140 | ' | |
141 | ||
d70b4a8f | 142 | test_done |