##// END OF EJS Templates
tests: stabilize test-extdiff.t on Windows...
Matt Harbison -
r41757:67e622ad default
parent child Browse files
Show More
@@ -1,521 +1,517
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 > alabalaf =
26 26 > [merge-tools]
27 27 > alabalaf.executable = echo
28 28 > alabalaf.diffargs = diffing
29 29 > EOF
30 30
31 31 $ hg falabala
32 32 diffing a.000000000000 a
33 33 [1]
34 34
35 35 $ hg help falabala
36 36 hg falabala [OPTION]... [FILE]...
37 37
38 38 use external program to diff repository (or selected files)
39 39
40 40 Show differences between revisions for the specified files, using the
41 41 following program:
42 42
43 43 'echo'
44 44
45 45 When two revision arguments are given, then changes are shown between
46 46 those revisions. If only one revision is specified then that revision is
47 47 compared to the working directory, and, when no revisions are specified,
48 48 the working directory files are compared to its parent.
49 49
50 50 options ([+] can be repeated):
51 51
52 52 -o --option OPT [+] pass option to comparison program
53 53 -r --rev REV [+] revision
54 54 -c --change REV change made by revision
55 55 --per-file compare each file instead of revision snapshots
56 56 --confirm prompt user before each external program invocation
57 57 --patch compare patches for two revisions
58 58 -I --include PATTERN [+] include names matching the given patterns
59 59 -X --exclude PATTERN [+] exclude names matching the given patterns
60 60 -S --subrepos recurse into subrepositories
61 61
62 62 (some details hidden, use --verbose to show complete help)
63 63
64 64 $ hg ci -d '0 0' -mtest1
65 65
66 66 $ echo b >> a
67 67 $ hg ci -d '1 0' -mtest2
68 68
69 69 Should diff cloned files directly:
70 70
71 71 $ hg falabala -r 0:1
72 72 diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
73 73 diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
74 74 [1]
75 75
76 76 Specifying an empty revision should abort.
77 77
78 78 $ hg extdiff -p diff --patch --rev 'ancestor()' --rev 1
79 79 abort: empty revision on one side of range
80 80 [255]
81 81
82 82 Test diff during merge:
83 83
84 84 $ hg update -C 0
85 85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 86 $ echo c >> c
87 87 $ hg add c
88 88 $ hg ci -m "new branch" -d '1 0'
89 89 created new head
90 90 $ hg merge 1
91 91 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
92 92 (branch merge, don't forget to commit)
93 93
94 94 Should diff cloned file against wc file:
95 95
96 96 $ hg falabala
97 97 diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "*\\a\\a" (glob) (windows !)
98 98 diffing */extdiff.*/a.2a13a4d2da36/a */a/a (glob) (no-windows !)
99 99 [1]
100 100
101 101
102 102 Test --change option:
103 103
104 104 $ hg ci -d '2 0' -mtest3
105 105
106 106 $ hg falabala -c 1
107 107 diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
108 108 diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
109 109 [1]
110 110
111 111 Check diff are made from the first parent:
112 112
113 113 $ hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
114 114 diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "a.46c0e4daeb72\\a" (glob) (windows !)
115 115 diffing */extdiff.*/a.2a13a4d2da36/a a.46c0e4daeb72/a (glob) (no-windows !)
116 116 diff-like tools yield a non-zero exit code
117 117
118 118 issue3153: ensure using extdiff with removed subrepos doesn't crash:
119 119
120 120 $ hg init suba
121 121 $ cd suba
122 122 $ echo suba > suba
123 123 $ hg add
124 124 adding suba
125 125 $ hg ci -m "adding suba file"
126 126 $ cd ..
127 127 $ echo suba=suba > .hgsub
128 128 $ hg add
129 129 adding .hgsub
130 130 $ hg ci -Sm "adding subrepo"
131 131 $ echo > .hgsub
132 132 $ hg ci -m "removing subrepo"
133 133 $ hg falabala -r 4 -r 5 -S
134 134 diffing a.398e36faf9c6 a.5ab95fb166c4
135 135 [1]
136 136
137 137 Test --per-file option:
138 138
139 139 $ hg up -q -C 3
140 140 $ echo a2 > a
141 141 $ echo b2 > b
142 142 $ hg ci -d '3 0' -mtestmode1
143 143 created new head
144 144 $ hg falabala -c 6 --per-file
145 145 diffing "*\\extdiff.*\\a.46c0e4daeb72\\a" "a.81906f2b98ac\\a" (glob) (windows !)
146 146 diffing */extdiff.*/a.46c0e4daeb72/a a.81906f2b98ac/a (glob) (no-windows !)
147 147 diffing "*\\extdiff.*\\a.46c0e4daeb72\\b" "a.81906f2b98ac\\b" (glob) (windows !)
148 148 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob) (no-windows !)
149 149 [1]
150 150
151 151 Test --per-file option for gui tool:
152 152
153 153 $ hg --config extdiff.gui.alabalaf=True alabalaf -c 6 --per-file --debug
154 diffing "*\\extdiff.*\\a.46c0e4daeb72\\a" "a.81906f2b98ac\\a" (glob) (windows !)
155 diffing */extdiff.*/a.46c0e4daeb72/a a.81906f2b98ac/a (glob) (no-windows !)
156 diffing "*\\extdiff.*\\a.46c0e4daeb72\\b" "a.81906f2b98ac\\b" (glob) (windows !)
157 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob) (no-windows !)
154 diffing */extdiff.*/a.46c0e4daeb72/a a.81906f2b98ac/a (glob)
155 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob)
158 156 making snapshot of 2 files from rev 46c0e4daeb72
159 157 a
160 158 b
161 159 making snapshot of 2 files from rev 81906f2b98ac
162 160 a
163 161 b
164 162 running '* diffing * *' in * (backgrounded) (glob)
165 163 running '* diffing * *' in * (backgrounded) (glob)
166 164 cleaning up temp directory
167 165 [1]
168 166
169 167 Test --per-file option for gui tool again:
170 168
171 169 $ hg --config merge-tools.alabalaf.gui=True alabalaf -c 6 --per-file --debug
172 diffing "*\\extdiff.*\\a.46c0e4daeb72\\a" "a.81906f2b98ac\\a" (glob) (windows !)
173 diffing */extdiff.*/a.46c0e4daeb72/a a.81906f2b98ac/a (glob) (no-windows !)
174 diffing "*\\extdiff.*\\a.46c0e4daeb72\\b" "a.81906f2b98ac\\b" (glob) (windows !)
175 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob) (no-windows !)
170 diffing */extdiff.*/a.46c0e4daeb72/a a.81906f2b98ac/a (glob)
171 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob)
176 172 making snapshot of 2 files from rev 46c0e4daeb72
177 173 a
178 174 b
179 175 making snapshot of 2 files from rev 81906f2b98ac
180 176 a
181 177 b
182 178 running '* diffing * *' in * (backgrounded) (glob)
183 179 running '* diffing * *' in * (backgrounded) (glob)
184 180 cleaning up temp directory
185 181 [1]
186 182
187 183 Test --per-file and --confirm options:
188 184
189 185 $ hg --config ui.interactive=True falabala -c 6 --per-file --confirm <<EOF
190 186 > n
191 187 > y
192 188 > EOF
193 189 diff a (1 of 2) [Yns?] n
194 190 diff b (2 of 2) [Yns?] y
195 191 diffing "*\\extdiff.*\\a.46c0e4daeb72\\b" "a.81906f2b98ac\\b" (glob) (windows !)
196 192 diffing */extdiff.*/a.46c0e4daeb72/b a.81906f2b98ac/b (glob) (no-windows !)
197 193 [1]
198 194
199 195 Test --per-file and --confirm options with skipping:
200 196
201 197 $ hg --config ui.interactive=True falabala -c 6 --per-file --confirm <<EOF
202 198 > s
203 199 > EOF
204 200 diff a (1 of 2) [Yns?] s
205 201 [1]
206 202
207 203 issue4463: usage of command line configuration without additional quoting
208 204
209 205 $ cat <<EOF >> $HGRCPATH
210 206 > [extdiff]
211 207 > cmd.4463a = echo
212 208 > opts.4463a = a-naked 'single quoted' "double quoted"
213 209 > 4463b = echo b-naked 'single quoted' "double quoted"
214 210 > echo =
215 211 > EOF
216 212 $ hg update -q -C 0
217 213 $ echo a >> a
218 214
219 215 $ hg --debug 4463a | grep '^running'
220 216 running 'echo a-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
221 217 running 'echo a-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
222 218 $ hg --debug 4463b | grep '^running'
223 219 running 'echo b-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
224 220 running 'echo b-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
225 221 $ hg --debug echo | grep '^running'
226 222 running '*echo* "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
227 223 running '*echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
228 224
229 225 (getting options from other than extdiff section)
230 226
231 227 $ cat <<EOF >> $HGRCPATH
232 228 > [extdiff]
233 229 > # using diff-tools diffargs
234 230 > 4463b2 = echo
235 231 > # using merge-tools diffargs
236 232 > 4463b3 = echo
237 233 > # no diffargs
238 234 > 4463b4 = echo
239 235 > [diff-tools]
240 236 > 4463b2.diffargs = b2-naked 'single quoted' "double quoted"
241 237 > [merge-tools]
242 238 > 4463b3.diffargs = b3-naked 'single quoted' "double quoted"
243 239 > EOF
244 240
245 241 $ hg --debug 4463b2 | grep '^running'
246 242 running 'echo b2-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
247 243 running 'echo b2-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
248 244 $ hg --debug 4463b3 | grep '^running'
249 245 running 'echo b3-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
250 246 running 'echo b3-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
251 247 $ hg --debug 4463b4 | grep '^running'
252 248 running 'echo "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
253 249 running 'echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !)
254 250 $ hg --debug 4463b4 --option b4-naked --option 'being quoted' | grep '^running'
255 251 running 'echo b4-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
256 252 running "echo b4-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !)
257 253 $ hg --debug extdiff -p echo --option echo-naked --option 'being quoted' | grep '^running'
258 254 running 'echo echo-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !)
259 255 running "echo echo-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !)
260 256
261 257 $ touch 'sp ace'
262 258 $ hg add 'sp ace'
263 259 $ hg ci -m 'sp ace'
264 260 created new head
265 261 $ echo > 'sp ace'
266 262
267 263 Test pre-72a89cf86fcd backward compatibility with half-baked manual quoting
268 264
269 265 $ cat <<EOF >> $HGRCPATH
270 266 > [extdiff]
271 267 > odd =
272 268 > [merge-tools]
273 269 > odd.diffargs = --foo='\$clabel' '\$clabel' "--bar=\$clabel" "\$clabel"
274 270 > odd.executable = echo
275 271 > EOF
276 272
277 273 $ hg --debug odd | grep '^running'
278 274 running '"*\\echo.exe" --foo="sp ace" "sp ace" --bar="sp ace" "sp ace"' in * (glob) (windows !)
279 275 running "*/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob) (no-windows !)
280 276
281 277 Empty argument must be quoted
282 278
283 279 $ cat <<EOF >> $HGRCPATH
284 280 > [extdiff]
285 281 > kdiff3 = echo
286 282 > [merge-tools]
287 283 > kdiff3.diffargs=--L1 \$plabel1 --L2 \$clabel \$parent \$child
288 284 > EOF
289 285
290 286 $ hg --debug kdiff3 -r0 | grep '^running'
291 287 running 'echo --L1 "@0" --L2 "" a.8a5febb7f867 a' in * (glob) (windows !)
292 288 running "echo --L1 '@0' --L2 '' a.8a5febb7f867 a" in * (glob) (no-windows !)
293 289
294 290
295 291 Test extdiff of multiple files in tmp dir:
296 292
297 293 $ hg update -C 0 > /dev/null
298 294 $ echo changed > a
299 295 $ echo changed > b
300 296 #if execbit
301 297 $ chmod +x b
302 298 #endif
303 299
304 300 Diff in working directory, before:
305 301
306 302 $ hg diff --git
307 303 diff --git a/a b/a
308 304 --- a/a
309 305 +++ b/a
310 306 @@ -1,1 +1,1 @@
311 307 -a
312 308 +changed
313 309 diff --git a/b b/b
314 310 old mode 100644 (execbit !)
315 311 new mode 100755 (execbit !)
316 312 --- a/b
317 313 +++ b/b
318 314 @@ -1,1 +1,1 @@
319 315 -b
320 316 +changed
321 317
322 318
323 319 Edit with extdiff -p:
324 320
325 321 Prepare custom diff/edit tool:
326 322
327 323 $ cat > 'diff tool.py' << EOT
328 324 > #!$PYTHON
329 325 > import time
330 326 > time.sleep(1) # avoid unchanged-timestamp problems
331 327 > open('a/a', 'ab').write(b'edited\n')
332 328 > open('a/b', 'ab').write(b'edited\n')
333 329 > EOT
334 330
335 331 #if execbit
336 332 $ chmod +x 'diff tool.py'
337 333 #endif
338 334
339 335 will change to /tmp/extdiff.TMP and populate directories a.TMP and a
340 336 and start tool
341 337
342 338 #if windows
343 339 $ cat > 'diff tool.bat' << EOF
344 340 > @"$PYTHON" "`pwd`/diff tool.py"
345 341 > EOF
346 342 $ hg extdiff -p "`pwd`/diff tool.bat"
347 343 [1]
348 344 #else
349 345 $ hg extdiff -p "`pwd`/diff tool.py"
350 346 [1]
351 347 #endif
352 348
353 349 Diff in working directory, after:
354 350
355 351 $ hg diff --git
356 352 diff --git a/a b/a
357 353 --- a/a
358 354 +++ b/a
359 355 @@ -1,1 +1,2 @@
360 356 -a
361 357 +changed
362 358 +edited
363 359 diff --git a/b b/b
364 360 old mode 100644 (execbit !)
365 361 new mode 100755 (execbit !)
366 362 --- a/b
367 363 +++ b/b
368 364 @@ -1,1 +1,2 @@
369 365 -b
370 366 +changed
371 367 +edited
372 368
373 369 Test extdiff with --option:
374 370
375 371 $ hg extdiff -p echo -o this -c 1
376 372 this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
377 373 this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
378 374 [1]
379 375
380 376 $ hg falabala -o this -c 1
381 377 diffing this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
382 378 diffing this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
383 379 [1]
384 380
385 381 Test extdiff's handling of options with spaces in them:
386 382
387 383 $ hg edspace -c 1
388 384 "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
389 385 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
390 386 [1]
391 387
392 388 $ hg extdiff -p echo -o "name <user@example.com>" -c 1
393 389 "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
394 390 name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
395 391 [1]
396 392
397 393 Test with revsets:
398 394
399 395 $ hg extdif -p echo -c "rev(1)"
400 396 "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
401 397 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
402 398 [1]
403 399
404 400 $ hg extdif -p echo -r "0::1"
405 401 "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !)
406 402 */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !)
407 403 [1]
408 404
409 405 Fallback to merge-tools.tool.executable|regkey
410 406 $ mkdir dir
411 407 $ cat > 'dir/tool.sh' << 'EOF'
412 408 > #!/bin/sh
413 409 > # Mimic a tool that syncs all attrs, including mtime
414 410 > cp $1/a $2/a
415 411 > touch -r $1/a $2/a
416 412 > chmod +x $2/a
417 413 > echo "** custom diff **"
418 414 > EOF
419 415 #if execbit
420 416 $ chmod +x dir/tool.sh
421 417 #endif
422 418
423 419 Windows can't run *.sh directly, so create a shim executable that can be.
424 420 Without something executable, the next hg command will try to run `tl` instead
425 421 of $tool (and fail).
426 422 #if windows
427 423 $ cat > dir/tool.bat <<EOF
428 424 > @sh -c "`pwd`/dir/tool.sh %1 %2"
429 425 > EOF
430 426 $ tool=`pwd`/dir/tool.bat
431 427 #else
432 428 $ tool=`pwd`/dir/tool.sh
433 429 #endif
434 430
435 431 $ cat a
436 432 changed
437 433 edited
438 434 $ hg --debug tl --config extdiff.tl= --config merge-tools.tl.executable=$tool
439 435 making snapshot of 2 files from rev * (glob)
440 436 a
441 437 b
442 438 making snapshot of 2 files from working directory
443 439 a
444 440 b
445 441 running '$TESTTMP/a/dir/tool.bat a.* a' in */extdiff.* (glob) (windows !)
446 442 running '$TESTTMP/a/dir/tool.sh a.* a' in */extdiff.* (glob) (no-windows !)
447 443 ** custom diff **
448 444 file changed while diffing. Overwriting: $TESTTMP/a/a (src: */extdiff.*/a/a) (glob)
449 445 cleaning up temp directory
450 446 [1]
451 447 $ cat a
452 448 a
453 449
454 450 #if execbit
455 451 $ [ -x a ]
456 452
457 453 $ cat > 'dir/tool.sh' << 'EOF'
458 454 > #!/bin/sh
459 455 > chmod -x $2/a
460 456 > echo "** custom diff **"
461 457 > EOF
462 458
463 459 $ hg --debug tl --config extdiff.tl= --config merge-tools.tl.executable=$tool
464 460 making snapshot of 2 files from rev * (glob)
465 461 a
466 462 b
467 463 making snapshot of 2 files from working directory
468 464 a
469 465 b
470 466 running '$TESTTMP/a/dir/tool.sh a.* a' in */extdiff.* (glob)
471 467 ** custom diff **
472 468 file changed while diffing. Overwriting: $TESTTMP/a/a (src: */extdiff.*/a/a) (glob)
473 469 cleaning up temp directory
474 470 [1]
475 471
476 472 $ [ -x a ]
477 473 [1]
478 474 #endif
479 475
480 476 $ cd ..
481 477
482 478 #if symlink
483 479
484 480 Test symlinks handling (issue1909)
485 481
486 482 $ hg init testsymlinks
487 483 $ cd testsymlinks
488 484 $ echo a > a
489 485 $ hg ci -Am adda
490 486 adding a
491 487 $ echo a >> a
492 488 $ ln -s missing linka
493 489 $ hg add linka
494 490 $ hg falabala -r 0 --traceback
495 491 diffing testsymlinks.07f494440405 testsymlinks
496 492 [1]
497 493 $ cd ..
498 494
499 495 #endif
500 496
501 497 Test handling of non-ASCII paths in generated docstrings (issue5301)
502 498
503 499 >>> with open("u", "wb") as f:
504 500 ... n = f.write(b"\xa5\xa5")
505 501 $ U=`cat u`
506 502
507 503 $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help -k xyzzy
508 504 abort: no matches
509 505 (try 'hg help' for a list of topics)
510 506 [255]
511 507
512 508 $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help td > /dev/null
513 509
514 510 $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help -k xyzzy
515 511 abort: no matches
516 512 (try 'hg help' for a list of topics)
517 513 [255]
518 514
519 515 $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help td \
520 516 > | grep "^ '"
521 517 '\xa5\xa5'
General Comments 0
You need to be logged in to leave comments. Login now