@matheusbsbs / matheus-bagliano / commits / 30c56eaa2e
Fork 0

tests for request-pull

Test that request-pull handles failure to push cleanly, writes pull requests that produce the correct effect when followed, and uses a predictable format. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Apr 24, 2010 at 07:11 UTC 30c56eaa2e7ab230a89a6fdc76682d2afaf5d4b1
1 file changed +214
t/t5150-request-pull.sh new
+214
@@ -0,0 +1,214 @@
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
70 + / in the git repository at:$/! d
71 + n
72 + /^$/! q
73 + n
74 + s/^[ ]*\(.*\) \([^ ]*\)/please pull\
75 + \1\
76 + \2/p
77 + q
78 + EOT
79 +
80 + cat <<-EOT >fuzz.sed
81 + #!/bin/sed -nf
82 + s/$_x40/OBJECT_NAME/g
83 + s/A U Thor/AUTHOR/g
84 + s/ [^ ].*/ SUBJECT/g
85 + s/$downstream_url_for_sed/URL/g
86 + s/for-upstream/BRANCH/g
87 + s/mnemonic.txt/FILENAME/g
88 + /^ FILENAME | *[0-9]* [-+]*\$/ b diffstat
89 + /^AUTHOR ([0-9]*):\$/ b shortlog
90 + p
91 + b
92 + : diffstat
93 + n
94 + / [0-9]* files changed/ {
95 + a\
96 + DIFFSTAT
97 + b
98 + }
99 + b diffstat
100 + : shortlog
101 + /^ [a-zA-Z]/ n
102 + /^[a-zA-Z]* ([0-9]*):\$/ n
103 + /^\$/ N
104 + /^\n[a-zA-Z]* ([0-9]*):\$/! {
105 + a\
106 + SHORTLOG
107 + D
108 + }
109 + n
110 + b shortlog
111 + EOT
112 +
113 +'
114 +
115 +test_expect_success 'pull request when forgot to push' '
116 +
117 + rm -fr downstream.git &&
118 + git init --bare downstream.git &&
119 + (
120 + cd local &&
121 + git checkout initial &&
122 + git merge --ff-only master &&
123 + test_must_fail git request-pull initial "$downstream_url" \
124 + 2>../err
125 + ) &&
126 + grep "No branch of.*is at:\$" err &&
127 + grep "Are you sure you pushed" err
128 +
129 +'
130 +
131 +test_expect_success 'pull request after push' '
132 +
133 + rm -fr downstream.git &&
134 + git init --bare downstream.git &&
135 + (
136 + cd local &&
137 + git checkout initial &&
138 + git merge --ff-only master &&
139 + git push origin master:for-upstream &&
140 + git request-pull initial origin >../request
141 + ) &&
142 + sed -nf read-request.sed <request >digest &&
143 + cat digest &&
144 + {
145 + read task &&
146 + read repository &&
147 + read branch
148 + } <digest &&
149 + (
150 + cd upstream-private &&
151 + git checkout initial &&
152 + git pull --ff-only "$repository" "$branch"
153 + ) &&
154 + test "$branch" = for-upstream &&
155 + test_cmp local/mnemonic.txt upstream-private/mnemonic.txt
156 +
157 +'
158 +
159 +test_expect_success 'request names an appropriate branch' '
160 +
161 + rm -fr downstream.git &&
162 + git init --bare downstream.git &&
163 + (
164 + cd local &&
165 + git checkout initial &&
166 + git merge --ff-only master &&
167 + git push --tags origin master simplify &&
168 + git push origin master:for-upstream &&
169 + git request-pull initial "$downstream_url" >../request
170 + ) &&
171 + sed -nf read-request.sed <request >digest &&
172 + cat digest &&
173 + {
174 + read task &&
175 + read repository &&
176 + read branch
177 + } <digest &&
178 + {
179 + test "$branch" = master ||
180 + test "$branch" = for-upstream
181 + }
182 +
183 +'
184 +
185 +test_expect_success 'pull request format' '
186 +
187 + rm -fr downstream.git &&
188 + git init --bare downstream.git &&
189 + cat <<-\EOT >expect &&
190 + The following changes since commit OBJECT_NAME:
191 + AUTHOR (1):
192 + SUBJECT
193 +
194 + are available in the git repository at:
195 +
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 +
214 +test_done