]>
Commit | Line | Data |
---|---|---|
30c56eaa JN |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test workflows involving pull request.' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success 'setup' ' | |
8 | ||
9 | git init --bare upstream.git && | |
10 | git init --bare downstream.git && | |
11 | git clone upstream.git upstream-private && | |
12 | git clone downstream.git local && | |
13 | ||
14 | trash_url="file://$TRASH_DIRECTORY" && | |
15 | downstream_url="$trash_url/downstream.git/" && | |
16 | upstream_url="$trash_url/upstream.git/" && | |
17 | ||
18 | ( | |
19 | cd upstream-private && | |
20 | cat <<-\EOT >mnemonic.txt && | |
21 | Thirtey days hath November, | |
22 | Aprile, June, and September: | |
23 | EOT | |
24 | git add mnemonic.txt && | |
25 | test_tick && | |
26 | git commit -m "\"Thirty days\", a reminder of month lengths" && | |
27 | git tag -m "version 1" -a initial && | |
28 | git push --tags origin master | |
29 | ) && | |
30 | ( | |
31 | cd local && | |
32 | git remote add upstream "$trash_url/upstream.git" && | |
33 | git fetch upstream && | |
34 | git pull upstream master && | |
35 | cat <<-\EOT >>mnemonic.txt && | |
36 | Of twyecescore-eightt is but eine, | |
37 | And all the remnante be thrycescore-eine. | |
38 | O’course Leap yare comes an’pynes, | |
39 | Ev’rie foure yares, gote it ryghth. | |
40 | An’twyecescore-eight is but twyecescore-nyne. | |
41 | EOT | |
42 | git add mnemonic.txt && | |
43 | test_tick && | |
44 | git commit -m "More detail" && | |
45 | git tag -m "version 2" -a full && | |
46 | git checkout -b simplify HEAD^ && | |
47 | mv mnemonic.txt mnemonic.standard && | |
48 | cat <<-\EOT >mnemonic.clarified && | |
49 | Thirty days has September, | |
50 | All the rest I can’t remember. | |
51 | EOT | |
52 | git add -N mnemonic.standard mnemonic.clarified && | |
53 | git commit -a -m "Adapt to use modern, simpler English | |
54 | ||
55 | But keep the old version, too, in case some people prefer it." && | |
56 | git checkout master | |
57 | ) | |
58 | ||
59 | ' | |
60 | ||
61 | test_expect_success 'setup: two scripts for reading pull requests' ' | |
62 | ||
63 | downstream_url_for_sed=$( | |
64 | printf "%s\n" "$downstream_url" | | |
65 | sed -e '\''s/\\/\\\\/g'\'' -e '\''s/[[/.*^$]/\\&/g'\'' | |
66 | ) && | |
67 | ||
68 | cat <<-\EOT >read-request.sed && | |
69 | #!/bin/sed -nf | |
6f89384f | 70 | / in the git repository at:$/!d |
30c56eaa | 71 | n |
f2cabf6a | 72 | /^$/ n |
30c56eaa JN |
73 | s/^[ ]*\(.*\) \([^ ]*\)/please pull\ |
74 | \1\ | |
75 | \2/p | |
76 | q | |
77 | EOT | |
78 | ||
79 | cat <<-EOT >fuzz.sed | |
80 | #!/bin/sed -nf | |
81 | s/$_x40/OBJECT_NAME/g | |
82 | s/A U Thor/AUTHOR/g | |
f2cabf6a | 83 | s/[-0-9]\{10\} [:0-9]\{8\} [-+][0-9]\{4\}/DATE/g |
30c56eaa | 84 | s/ [^ ].*/ SUBJECT/g |
f2cabf6a | 85 | s/ [^ ].* (DATE)/ SUBJECT (DATE)/g |
30c56eaa JN |
86 | s/$downstream_url_for_sed/URL/g |
87 | s/for-upstream/BRANCH/g | |
88 | s/mnemonic.txt/FILENAME/g | |
89 | /^ FILENAME | *[0-9]* [-+]*\$/ b diffstat | |
90 | /^AUTHOR ([0-9]*):\$/ b shortlog | |
91 | p | |
92 | b | |
93 | : diffstat | |
94 | n | |
95 | / [0-9]* files changed/ { | |
5bab6917 | 96 | a\\ |
30c56eaa JN |
97 | DIFFSTAT |
98 | b | |
99 | } | |
100 | b diffstat | |
101 | : shortlog | |
102 | /^ [a-zA-Z]/ n | |
103 | /^[a-zA-Z]* ([0-9]*):\$/ n | |
104 | /^\$/ N | |
6f89384f | 105 | /^\n[a-zA-Z]* ([0-9]*):\$/!{ |
5bab6917 | 106 | a\\ |
30c56eaa JN |
107 | SHORTLOG |
108 | D | |
109 | } | |
110 | n | |
111 | b shortlog | |
112 | EOT | |
113 | ||
114 | ' | |
115 | ||
116 | test_expect_success 'pull request when forgot to push' ' | |
117 | ||
118 | rm -fr downstream.git && | |
119 | git init --bare downstream.git && | |
120 | ( | |
121 | cd local && | |
122 | git checkout initial && | |
123 | git merge --ff-only master && | |
124 | test_must_fail git request-pull initial "$downstream_url" \ | |
125 | 2>../err | |
126 | ) && | |
127 | grep "No branch of.*is at:\$" err && | |
128 | grep "Are you sure you pushed" err | |
129 | ||
130 | ' | |
131 | ||
132 | test_expect_success 'pull request after push' ' | |
133 | ||
134 | rm -fr downstream.git && | |
135 | git init --bare downstream.git && | |
136 | ( | |
137 | cd local && | |
138 | git checkout initial && | |
139 | git merge --ff-only master && | |
140 | git push origin master:for-upstream && | |
141 | git request-pull initial origin >../request | |
142 | ) && | |
143 | sed -nf read-request.sed <request >digest && | |
144 | cat digest && | |
145 | { | |
146 | read task && | |
147 | read repository && | |
148 | read branch | |
149 | } <digest && | |
150 | ( | |
151 | cd upstream-private && | |
152 | git checkout initial && | |
153 | git pull --ff-only "$repository" "$branch" | |
154 | ) && | |
155 | test "$branch" = for-upstream && | |
156 | test_cmp local/mnemonic.txt upstream-private/mnemonic.txt | |
157 | ||
158 | ' | |
159 | ||
160 | test_expect_success 'request names an appropriate branch' ' | |
161 | ||
162 | rm -fr downstream.git && | |
163 | git init --bare downstream.git && | |
164 | ( | |
165 | cd local && | |
166 | git checkout initial && | |
167 | git merge --ff-only master && | |
168 | git push --tags origin master simplify && | |
169 | git push origin master:for-upstream && | |
170 | git request-pull initial "$downstream_url" >../request | |
171 | ) && | |
172 | sed -nf read-request.sed <request >digest && | |
173 | cat digest && | |
174 | { | |
175 | read task && | |
176 | read repository && | |
177 | read branch | |
178 | } <digest && | |
179 | { | |
180 | test "$branch" = master || | |
181 | test "$branch" = for-upstream | |
182 | } | |
183 | ||
184 | ' | |
185 | ||
186 | test_expect_success 'pull request format' ' | |
187 | ||
188 | rm -fr downstream.git && | |
189 | git init --bare downstream.git && | |
190 | cat <<-\EOT >expect && | |
191 | The following changes since commit OBJECT_NAME: | |
30c56eaa | 192 | |
f2cabf6a | 193 | SUBJECT (DATE) |
30c56eaa | 194 | |
f2cabf6a | 195 | are available in the git repository at: |
30c56eaa JN |
196 | URL BRANCH |
197 | ||
198 | SHORTLOG | |
199 | ||
200 | DIFFSTAT | |
201 | EOT | |
202 | ( | |
203 | cd local && | |
204 | git checkout initial && | |
205 | git merge --ff-only master && | |
206 | git push origin master:for-upstream && | |
207 | git request-pull initial "$downstream_url" >../request | |
208 | ) && | |
209 | <request sed -nf fuzz.sed >request.fuzzy && | |
210 | test_cmp expect request.fuzzy | |
211 | ||
212 | ' | |
213 | ||
50ab6558 JN |
214 | test_expect_success 'request-pull ignores OPTIONS_KEEPDASHDASH poison' ' |
215 | ||
216 | ( | |
217 | cd local && | |
218 | OPTIONS_KEEPDASHDASH=Yes && | |
219 | export OPTIONS_KEEPDASHDASH && | |
220 | git checkout initial && | |
221 | git merge --ff-only master && | |
222 | git push origin master:for-upstream && | |
223 | git request-pull -- initial "$downstream_url" >../request | |
224 | ) | |
225 | ||
226 | ' | |
227 | ||
30c56eaa | 228 | test_done |