##// END OF EJS Templates
test-extdiff: narrow the range of an '#if execbit' block...
Matt Harbison -
r32210:f41cc3dd default
parent child Browse files
Show More
@@ -1,378 +1,392 b''
1 1 $ echo "[extensions]" >> $HGRCPATH
2 2 $ echo "extdiff=" >> $HGRCPATH
3 3
4 4 $ hg init a
5 5 $ cd a
6 6 $ echo a > a
7 7 $ echo b > b
8 8 $ hg add
9 9 adding a
10 10 adding b
11 11
12 12 Should diff cloned directories:
13 13
14 14 $ hg extdiff -o -r $opt
15 15 Only in a: a
16 16 Only in a: b
17 17 [1]
18 18
19 19 $ cat <<EOF >> $HGRCPATH
20 20 > [extdiff]
21 21 > cmd.falabala = echo
22 22 > opts.falabala = diffing
23 23 > cmd.edspace = echo
24 24 > opts.edspace = "name <user@example.com>"
25 25 > EOF
26 26
27 27 $ hg falabala
28 28 diffing a.000000000000 a
29 29 [1]
30 30
31 31 $ hg help falabala
32 32 hg falabala [OPTION]... [FILE]...
33 33
34 34 use external program to diff repository (or selected files)
35 35
36 36 Show differences between revisions for the specified files, using the
37 37 following program:
38 38
39 39 'echo'
40 40
41 41 When two revision arguments are given, then changes are shown between
42 42 those revisions. If only one revision is specified then that revision is
43 43 compared to the working directory, and, when no revisions are specified,
44 44 the working directory files are compared to its parent.
45 45
46 46 options ([+] can be repeated):
47 47
48 48 -o --option OPT [+] pass option to comparison program
49 49 -r --rev REV [+] revision
50 50 -c --change REV change made by revision
51 51 --patch compare patches for two revisions
52 52 -I --include PATTERN [+] include names matching the given patterns
53 53 -X --exclude PATTERN [+] exclude names matching the given patterns
54 54 -S --subrepos recurse into subrepositories
55 55
56 56 (some details hidden, use --verbose to show complete help)
57 57
58 58 $ hg ci -d '0 0' -mtest1
59 59
60 60 $ echo b >> a
61 61 $ hg ci -d '1 0' -mtest2
62 62
63 63 Should diff cloned files directly:
64 64
65 65 $ hg falabala -r 0:1
66 66 diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
67 67 diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
68 68 [1]
69 69
70 70 Specifying an empty revision should abort.
71 71
72 72 $ hg extdiff -p diff --patch --rev 'ancestor()' --rev 1
73 73 abort: empty revision on one side of range
74 74 [255]
75 75
76 76 Test diff during merge:
77 77
78 78 $ hg update -C 0
79 79 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
80 80 $ echo c >> c
81 81 $ hg add c
82 82 $ hg ci -m "new branch" -d '1 0'
83 83 created new head
84 84 $ hg merge 1
85 85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 86 (branch merge, don't forget to commit)
87 87
88 88 Should diff cloned file against wc file:
89 89
90 90 $ hg falabala
91 91 diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "*\\a\\a" (glob) (windows !)
92 92 diffing */extdiff.*/a.2a13a4d2da36/a */a/a (glob) (no-windows !)
93 93 [1]
94 94
95 95
96 96 Test --change option:
97 97
98 98 $ hg ci -d '2 0' -mtest3
99 99
100 100 $ hg falabala -c 1
101 101 diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
102 102 diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
103 103 [1]
104 104
105 105 Check diff are made from the first parent:
106 106
107 107 $ hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
108 108 diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "a.46c0e4daeb72\\a" (glob) (windows !)
109 109 diffing */extdiff.*/a.2a13a4d2da36/a a.46c0e4daeb72/a (glob) (no-windows !)
110 110 diff-like tools yield a non-zero exit code
111 111
112 112 issue3153: ensure using extdiff with removed subrepos doesn't crash:
113 113
114 114 $ hg init suba
115 115 $ cd suba
116 116 $ echo suba > suba
117 117 $ hg add
118 118 adding suba
119 119 $ hg ci -m "adding suba file"
120 120 $ cd ..
121 121 $ echo suba=suba > .hgsub
122 122 $ hg add
123 123 adding .hgsub
124 124 $ hg ci -Sm "adding subrepo"
125 125 $ echo > .hgsub
126 126 $ hg ci -m "removing subrepo"
127 127 $ hg falabala -r 4 -r 5 -S
128 128 diffing a.398e36faf9c6 a.5ab95fb166c4
129 129 [1]
130 130
131 131 issue4463: usage of command line configuration without additional quoting
132 132
133 133 $ cat <<EOF >> $HGRCPATH
134 134 > [extdiff]
135 135 > cmd.4463a = echo
136 136 > opts.4463a = a-naked 'single quoted' "double quoted"
137 137 > 4463b = echo b-naked 'single quoted' "double quoted"
138 138 > echo =
139 139 > EOF
140 140 $ hg update -q -C 0
141 141 $ echo a >> a
142 142
143 143 $ hg --debug 4463a | grep '^running'
144 144 running 'echo a-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
145 145 running 'echo a-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
146 146 $ hg --debug 4463b | grep '^running'
147 147 running 'echo b-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
148 148 running 'echo b-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
149 149 $ hg --debug echo | grep '^running'
150 150 running '*echo* "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
151 151 running '*echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
152 152
153 153 (getting options from other than extdiff section)
154 154
155 155 $ cat <<EOF >> $HGRCPATH
156 156 > [extdiff]
157 157 > # using diff-tools diffargs
158 158 > 4463b2 = echo
159 159 > # using merge-tools diffargs
160 160 > 4463b3 = echo
161 161 > # no diffargs
162 162 > 4463b4 = echo
163 163 > [diff-tools]
164 164 > 4463b2.diffargs = b2-naked 'single quoted' "double quoted"
165 165 > [merge-tools]
166 166 > 4463b3.diffargs = b3-naked 'single quoted' "double quoted"
167 167 > EOF
168 168
169 169 $ hg --debug 4463b2 | grep '^running'
170 170 running 'echo b2-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
171 171 running 'echo b2-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
172 172 $ hg --debug 4463b3 | grep '^running'
173 173 running 'echo b3-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
174 174 running 'echo b3-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
175 175 $ hg --debug 4463b4 | grep '^running'
176 176 running 'echo "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
177 177 running 'echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
178 178 $ hg --debug 4463b4 --option b4-naked --option 'being quoted' | grep '^running'
179 179 running 'echo b4-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
180 180 running "echo b4-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !)
181 181 $ hg --debug extdiff -p echo --option echo-naked --option 'being quoted' | grep '^running'
182 182 running 'echo echo-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
183 183 running "echo echo-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !)
184 184
185 185 $ touch 'sp ace'
186 186 $ hg add 'sp ace'
187 187 $ hg ci -m 'sp ace'
188 188 created new head
189 189 $ echo > 'sp ace'
190 190
191 191 Test pre-72a89cf86fcd backward compatibility with half-baked manual quoting
192 192
193 193 $ cat <<EOF >> $HGRCPATH
194 194 > [extdiff]
195 195 > odd =
196 196 > [merge-tools]
197 197 > odd.diffargs = --foo='\$clabel' '\$clabel' "--bar=\$clabel" "\$clabel"
198 198 > odd.executable = echo
199 199 > EOF
200 200
201 201 $ hg --debug odd | grep '^running'
202 202 running '"*\\echo.exe" --foo="sp ace" "sp ace" --bar="sp ace" "sp ace"' in * (glob) (windows !)
203 203 running "*/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob) (no-windows !)
204 204
205 205 Empty argument must be quoted
206 206
207 207 $ cat <<EOF >> $HGRCPATH
208 208 > [extdiff]
209 209 > kdiff3 = echo
210 210 > [merge-tools]
211 211 > kdiff3.diffargs=--L1 \$plabel1 --L2 \$clabel \$parent \$child
212 212 > EOF
213 213
214 214 $ hg --debug kdiff3 -r0 | grep '^running'
215 215 running 'echo --L1 "@0" --L2 "" a.8a5febb7f867 a' in * (glob) (windows !)
216 216 running "echo --L1 '@0' --L2 '' a.8a5febb7f867 a" in * (glob) (no-windows !)
217 217
218 #if execbit
219 218
220 219 Test extdiff of multiple files in tmp dir:
221 220
222 221 $ hg update -C 0 > /dev/null
223 222 $ echo changed > a
224 223 $ echo changed > b
224 #if execbit
225 225 $ chmod +x b
226 #endif
226 227
227 228 Diff in working directory, before:
228 229
229 230 $ hg diff --git
230 231 diff --git a/a b/a
231 232 --- a/a
232 233 +++ b/a
233 234 @@ -1,1 +1,1 @@
234 235 -a
235 236 +changed
236 237 diff --git a/b b/b
237 old mode 100644
238 new mode 100755
238 old mode 100644 (execbit !)
239 new mode 100755 (execbit !)
239 240 --- a/b
240 241 +++ b/b
241 242 @@ -1,1 +1,1 @@
242 243 -b
243 244 +changed
244 245
245 246
246 247 Edit with extdiff -p:
247 248
248 249 Prepare custom diff/edit tool:
249 250
250 251 $ cat > 'diff tool.py' << EOT
251 252 > #!/usr/bin/env python
252 253 > import time
253 254 > time.sleep(1) # avoid unchanged-timestamp problems
254 255 > file('a/a', 'ab').write('edited\n')
255 256 > file('a/b', 'ab').write('edited\n')
256 257 > EOT
257 258
259 #if execbit
258 260 $ chmod +x 'diff tool.py'
261 #endif
259 262
260 263 will change to /tmp/extdiff.TMP and populate directories a.TMP and a
261 264 and start tool
262 265
263 266 $ hg extdiff -p "`pwd`/diff tool.py"
264 267 [1]
265 268
266 269 Diff in working directory, after:
267 270
268 271 $ hg diff --git
269 272 diff --git a/a b/a
270 273 --- a/a
271 274 +++ b/a
272 275 @@ -1,1 +1,2 @@
273 276 -a
274 277 +changed
275 278 +edited
276 279 diff --git a/b b/b
277 old mode 100644
278 new mode 100755
280 old mode 100644 (execbit !)
281 new mode 100755 (execbit !)
279 282 --- a/b
280 283 +++ b/b
281 284 @@ -1,1 +1,2 @@
282 285 -b
283 286 +changed
284 287 +edited
285 288
286 289 Test extdiff with --option:
287 290
288 291 $ hg extdiff -p echo -o this -c 1
289 this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
292 this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
293 this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
290 294 [1]
291 295
292 296 $ hg falabala -o this -c 1
293 diffing this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
297 diffing this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
298 diffing this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
294 299 [1]
295 300
296 301 Test extdiff's handling of options with spaces in them:
297 302
298 303 $ hg edspace -c 1
299 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
304 "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
305 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
300 306 [1]
301 307
302 308 $ hg extdiff -p echo -o "name <user@example.com>" -c 1
303 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
309 "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
310 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
304 311 [1]
305 312
306 313 Test with revsets:
307 314
308 315 $ hg extdif -p echo -c "rev(1)"
309 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
316 "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
317 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
310 318 [1]
311 319
312 320 $ hg extdif -p echo -r "0::1"
313 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob)
321 "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
322 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
314 323 [1]
315 324
316 325 Fallback to merge-tools.tool.executable|regkey
317 326 $ mkdir dir
318 327 $ cat > 'dir/tool.sh' << EOF
319 328 > #!/bin/sh
320 329 > echo "** custom diff **"
321 330 > EOF
331 #if execbit
322 332 $ chmod +x dir/tool.sh
333 #endif
323 334 $ tool=`pwd`/dir/tool.sh
335
336 TODO: Fix this on Windows. It currently tries to run 'tl a.* a', instead of
337 falling back to tool.sh
338 #if no-windows
324 339 $ hg --debug tl --config extdiff.tl= --config merge-tools.tl.executable=$tool
325 340 making snapshot of 2 files from rev * (glob)
326 341 a
327 342 b
328 343 making snapshot of 2 files from working directory
329 344 a
330 345 b
331 346 running '$TESTTMP/a/dir/tool.sh a.* a' in */extdiff.* (glob)
332 347 ** custom diff **
333 348 cleaning up temp directory
334 349 [1]
350 #endif
335 351
336 352 $ cd ..
337 353
338 #endif
339
340 354 #if symlink
341 355
342 356 Test symlinks handling (issue1909)
343 357
344 358 $ hg init testsymlinks
345 359 $ cd testsymlinks
346 360 $ echo a > a
347 361 $ hg ci -Am adda
348 362 adding a
349 363 $ echo a >> a
350 364 $ ln -s missing linka
351 365 $ hg add linka
352 366 $ hg falabala -r 0 --traceback
353 367 diffing testsymlinks.07f494440405 testsymlinks
354 368 [1]
355 369 $ cd ..
356 370
357 371 #endif
358 372
359 373 Test handling of non-ASCII paths in generated docstrings (issue5301)
360 374
361 375 >>> open("u", "w").write("\xa5\xa5")
362 376 $ U=`cat u`
363 377
364 378 $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help -k xyzzy
365 379 abort: no matches
366 380 (try 'hg help' for a list of topics)
367 381 [255]
368 382
369 383 $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help td > /dev/null
370 384
371 385 $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help -k xyzzy
372 386 abort: no matches
373 387 (try 'hg help' for a list of topics)
374 388 [255]
375 389
376 390 $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help td \
377 391 > | grep "^ '"
378 392 '\xa5\xa5'
General Comments 0
You need to be logged in to leave comments. Login now