test-extdiff.t
436 lines
| 12.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-extdiff.t
Adrian Buehlmann
|
r12304 | $ echo "[extensions]" >> $HGRCPATH | ||
$ echo "extdiff=" >> $HGRCPATH | ||||
$ hg init a | ||||
$ cd a | ||||
$ echo a > a | ||||
$ echo b > b | ||||
$ hg add | ||||
adding a | ||||
adding b | ||||
Should diff cloned directories: | ||||
$ hg extdiff -o -r $opt | ||||
Only in a: a | ||||
Only in a: b | ||||
Matt Mackall
|
r12316 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Yuya Nishihara
|
r23172 | $ cat <<EOF >> $HGRCPATH | ||
> [extdiff] | ||||
> cmd.falabala = echo | ||||
> opts.falabala = diffing | ||||
> cmd.edspace = echo | ||||
> opts.edspace = "name <user@example.com>" | ||||
> EOF | ||||
Adrian Buehlmann
|
r12304 | |||
$ hg falabala | ||||
diffing a.000000000000 a | ||||
Matt Mackall
|
r12316 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
$ hg help falabala | ||||
hg falabala [OPTION]... [FILE]... | ||||
Yuya Nishihara
|
r29723 | use external program to diff repository (or selected files) | ||
Adrian Buehlmann
|
r12304 | |||
Show differences between revisions for the specified files, using the | ||||
Yuya Nishihara
|
r29723 | following program: | ||
'echo' | ||||
Adrian Buehlmann
|
r12304 | |||
When two revision arguments are given, then changes are shown between | ||||
those revisions. If only one revision is specified then that revision is | ||||
compared to the working directory, and, when no revisions are specified, | ||||
the working directory files are compared to its parent. | ||||
Matt Mackall
|
r22117 | options ([+] can be repeated): | ||
Adrian Buehlmann
|
r12304 | |||
Matt Mackall
|
r15145 | -o --option OPT [+] pass option to comparison program | ||
-r --rev REV [+] revision | ||||
-c --change REV change made by revision | ||||
Pierre-Yves David
|
r30152 | --patch compare patches for two revisions | ||
Matt Mackall
|
r15145 | -I --include PATTERN [+] include names matching the given patterns | ||
-X --exclude PATTERN [+] exclude names matching the given patterns | ||||
Pierre-Yves David
|
r30152 | -S --subrepos recurse into subrepositories | ||
Adrian Buehlmann
|
r12304 | |||
Matt Mackall
|
r22110 | (some details hidden, use --verbose to show complete help) | ||
Adrian Buehlmann
|
r12304 | |||
$ hg ci -d '0 0' -mtest1 | ||||
$ echo b >> a | ||||
$ hg ci -d '1 0' -mtest2 | ||||
Should diff cloned files directly: | ||||
Matt Harbison
|
r24885 | $ hg falabala -r 0:1 | ||
Matt Harbison
|
r32209 | diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Matt Harbison
|
r24885 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Matt Harbison
|
r26836 | Specifying an empty revision should abort. | ||
FUJIWARA Katsunori
|
r28053 | $ hg extdiff -p diff --patch --rev 'ancestor()' --rev 1 | ||
Matt Harbison
|
r26836 | abort: empty revision on one side of range | ||
[255] | ||||
Adrian Buehlmann
|
r12304 | Test diff during merge: | ||
$ hg update -C 0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo c >> c | ||||
$ hg add c | ||||
$ hg ci -m "new branch" -d '1 0' | ||||
created new head | ||||
$ hg merge 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Should diff cloned file against wc file: | ||||
Matt Harbison
|
r24885 | $ hg falabala | ||
Matt Harbison
|
r32209 | diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "*\\a\\a" (glob) (windows !) | ||
diffing */extdiff.*/a.2a13a4d2da36/a */a/a (glob) (no-windows !) | ||||
Matt Harbison
|
r24885 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Test --change option: | ||||
$ hg ci -d '2 0' -mtest3 | ||||
Matt Harbison
|
r32209 | |||
Matt Harbison
|
r24885 | $ hg falabala -c 1 | ||
Matt Harbison
|
r32209 | diffing "*\\extdiff.*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
diffing */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Matt Harbison
|
r24885 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Check diff are made from the first parent: | ||||
Matt Harbison
|
r24885 | $ hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code" | ||
Matt Harbison
|
r32209 | diffing "*\\extdiff.*\\a.2a13a4d2da36\\a" "a.46c0e4daeb72\\a" (glob) (windows !) | ||
diffing */extdiff.*/a.2a13a4d2da36/a a.46c0e4daeb72/a (glob) (no-windows !) | ||||
Matt Harbison
|
r24885 | diff-like tools yield a non-zero exit code | ||
Adrian Buehlmann
|
r12304 | |||
Andrew Zwicky
|
r27183 | issue3153: ensure using extdiff with removed subrepos doesn't crash: | ||
$ hg init suba | ||||
$ cd suba | ||||
$ echo suba > suba | ||||
$ hg add | ||||
adding suba | ||||
$ hg ci -m "adding suba file" | ||||
$ cd .. | ||||
$ echo suba=suba > .hgsub | ||||
$ hg add | ||||
adding .hgsub | ||||
$ hg ci -Sm "adding subrepo" | ||||
$ echo > .hgsub | ||||
$ hg ci -m "removing subrepo" | ||||
$ hg falabala -r 4 -r 5 -S | ||||
diffing a.398e36faf9c6 a.5ab95fb166c4 | ||||
[1] | ||||
FUJIWARA Katsunori
|
r23680 | issue4463: usage of command line configuration without additional quoting | ||
$ cat <<EOF >> $HGRCPATH | ||||
> [extdiff] | ||||
> cmd.4463a = echo | ||||
> opts.4463a = a-naked 'single quoted' "double quoted" | ||||
> 4463b = echo b-naked 'single quoted' "double quoted" | ||||
> echo = | ||||
> EOF | ||||
$ hg update -q -C 0 | ||||
$ echo a >> a | ||||
Matt Harbison
|
r32209 | |||
FUJIWARA Katsunori
|
r23680 | $ hg --debug 4463a | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo a-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running 'echo a-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | $ hg --debug 4463b | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo b-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running 'echo b-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | $ hg --debug echo | grep '^running' | ||
Matt Harbison
|
r32209 | running '*echo* "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running '*echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | |||
(getting options from other than extdiff section) | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [extdiff] | ||||
> # using diff-tools diffargs | ||||
> 4463b2 = echo | ||||
> # using merge-tools diffargs | ||||
> 4463b3 = echo | ||||
> # no diffargs | ||||
> 4463b4 = echo | ||||
> [diff-tools] | ||||
> 4463b2.diffargs = b2-naked 'single quoted' "double quoted" | ||||
> [merge-tools] | ||||
> 4463b3.diffargs = b3-naked 'single quoted' "double quoted" | ||||
> EOF | ||||
Matt Harbison
|
r32209 | |||
FUJIWARA Katsunori
|
r23680 | $ hg --debug 4463b2 | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo b2-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running 'echo b2-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | $ hg --debug 4463b3 | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo b3-naked \'single quoted\' "double quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running 'echo b3-naked \'single quoted\' "double quoted" */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | $ hg --debug 4463b4 | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running 'echo */a $TESTTMP/a/a' in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23682 | $ hg --debug 4463b4 --option b4-naked --option 'being quoted' | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo b4-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running "echo b4-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23682 | $ hg --debug extdiff -p echo --option echo-naked --option 'being quoted' | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo echo-naked "being quoted" "*\\a" "*\\a"' in */extdiff.* (glob) (windows !) | ||
running "echo echo-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob) (no-windows !) | ||||
FUJIWARA Katsunori
|
r23680 | |||
Mads Kiilerich
|
r23969 | $ touch 'sp ace' | ||
$ hg add 'sp ace' | ||||
$ hg ci -m 'sp ace' | ||||
created new head | ||||
$ echo > 'sp ace' | ||||
Test pre-72a89cf86fcd backward compatibility with half-baked manual quoting | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [extdiff] | ||||
> odd = | ||||
> [merge-tools] | ||||
> odd.diffargs = --foo='\$clabel' '\$clabel' "--bar=\$clabel" "\$clabel" | ||||
> odd.executable = echo | ||||
> EOF | ||||
Matt Harbison
|
r32209 | |||
Matt Harbison
|
r32208 | $ hg --debug odd | grep '^running' | ||
Matt Harbison
|
r32209 | running '"*\\echo.exe" --foo="sp ace" "sp ace" --bar="sp ace" "sp ace"' in * (glob) (windows !) | ||
running "*/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob) (no-windows !) | ||||
Mads Kiilerich
|
r23969 | |||
Yuya Nishihara
|
r24108 | Empty argument must be quoted | ||
$ cat <<EOF >> $HGRCPATH | ||||
> [extdiff] | ||||
> kdiff3 = echo | ||||
> [merge-tools] | ||||
> kdiff3.diffargs=--L1 \$plabel1 --L2 \$clabel \$parent \$child | ||||
> EOF | ||||
Matt Harbison
|
r32209 | |||
Yuya Nishihara
|
r24108 | $ hg --debug kdiff3 -r0 | grep '^running' | ||
Matt Harbison
|
r32209 | running 'echo --L1 "@0" --L2 "" a.8a5febb7f867 a' in * (glob) (windows !) | ||
running "echo --L1 '@0' --L2 '' a.8a5febb7f867 a" in * (glob) (no-windows !) | ||||
Yuya Nishihara
|
r24108 | |||
Mads Kiilerich
|
r16899 | |||
Adrian Buehlmann
|
r12304 | Test extdiff of multiple files in tmp dir: | ||
$ hg update -C 0 > /dev/null | ||||
$ echo changed > a | ||||
$ echo changed > b | ||||
Matt Harbison
|
r32210 | #if execbit | ||
Adrian Buehlmann
|
r12304 | $ chmod +x b | ||
Matt Harbison
|
r32210 | #endif | ||
Adrian Buehlmann
|
r12304 | |||
Diff in working directory, before: | ||||
$ hg diff --git | ||||
diff --git a/a b/a | ||||
--- a/a | ||||
+++ b/a | ||||
@@ -1,1 +1,1 @@ | ||||
-a | ||||
+changed | ||||
diff --git a/b b/b | ||||
Matt Harbison
|
r32210 | old mode 100644 (execbit !) | ||
new mode 100755 (execbit !) | ||||
Adrian Buehlmann
|
r12304 | --- a/b | ||
+++ b/b | ||||
@@ -1,1 +1,1 @@ | ||||
-b | ||||
+changed | ||||
Edit with extdiff -p: | ||||
Prepare custom diff/edit tool: | ||||
$ cat > 'diff tool.py' << EOT | ||||
> #!/usr/bin/env python | ||||
> import time | ||||
> time.sleep(1) # avoid unchanged-timestamp problems | ||||
> file('a/a', 'ab').write('edited\n') | ||||
> file('a/b', 'ab').write('edited\n') | ||||
> EOT | ||||
Matt Harbison
|
r32210 | #if execbit | ||
Adrian Buehlmann
|
r12304 | $ chmod +x 'diff tool.py' | ||
Matt Harbison
|
r32210 | #endif | ||
Adrian Buehlmann
|
r12304 | |||
Matt Mackall
|
r12328 | will change to /tmp/extdiff.TMP and populate directories a.TMP and a | ||
and start tool | ||||
Adrian Buehlmann
|
r12304 | $ hg extdiff -p "`pwd`/diff tool.py" | ||
Matt Mackall
|
r12316 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Diff in working directory, after: | ||||
$ hg diff --git | ||||
diff --git a/a b/a | ||||
--- a/a | ||||
+++ b/a | ||||
@@ -1,1 +1,2 @@ | ||||
-a | ||||
+changed | ||||
+edited | ||||
diff --git a/b b/b | ||||
Matt Harbison
|
r32210 | old mode 100644 (execbit !) | ||
new mode 100755 (execbit !) | ||||
Adrian Buehlmann
|
r12304 | --- a/b | ||
+++ b/b | ||||
@@ -1,1 +1,2 @@ | ||||
-b | ||||
+changed | ||||
+edited | ||||
Test extdiff with --option: | ||||
$ hg extdiff -p echo -o this -c 1 | ||||
Matt Harbison
|
r32210 | this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Matt Mackall
|
r12316 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
$ hg falabala -o this -c 1 | ||||
Matt Harbison
|
r32210 | diffing this "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
diffing this */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Matt Mackall
|
r12316 | [1] | ||
Adrian Buehlmann
|
r12304 | |||
Michael Fyles
|
r23138 | Test extdiff's handling of options with spaces in them: | ||
$ hg edspace -c 1 | ||||
Matt Harbison
|
r32210 | "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Michael Fyles
|
r23138 | [1] | ||
$ hg extdiff -p echo -o "name <user@example.com>" -c 1 | ||||
Matt Harbison
|
r32210 | "name <user@example.com>" "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
name <user@example.com> */extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Michael Fyles
|
r23138 | [1] | ||
David Wolever
|
r13660 | Test with revsets: | ||
$ hg extdif -p echo -c "rev(1)" | ||||
Matt Harbison
|
r32210 | "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
*/extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
Matt Mackall
|
r12316 | [1] | ||
David Wolever
|
r13660 | |||
$ hg extdif -p echo -r "0::1" | ||||
Matt Harbison
|
r32210 | "*\\a.8a5febb7f867\\a" "a.34eed99112ab\\a" (glob) (windows !) | ||
*/extdiff.*/a.8a5febb7f867/a a.34eed99112ab/a (glob) (no-windows !) | ||||
David Wolever
|
r13660 | [1] | ||
Thomas Arendsen Hein
|
r14024 | |||
Matt Harbison
|
r23150 | Fallback to merge-tools.tool.executable|regkey | ||
$ mkdir dir | ||||
Matt Harbison
|
r32212 | $ cat > 'dir/tool.sh' << 'EOF' | ||
Matt Harbison
|
r23150 | > #!/bin/sh | ||
Matt Harbison
|
r32212 | > # Mimic a tool that syncs all attrs, including mtime | ||
> cp $1/a $2/a | ||||
> touch -r $1/a $2/a | ||||
Matt Harbison
|
r32283 | > chmod +x $2/a | ||
Matt Harbison
|
r23150 | > echo "** custom diff **" | ||
> EOF | ||||
Matt Harbison
|
r32210 | #if execbit | ||
Matt Harbison
|
r23150 | $ chmod +x dir/tool.sh | ||
Matt Harbison
|
r32210 | #endif | ||
Matt Harbison
|
r32211 | Windows can't run *.sh directly, so create a shim executable that can be. | ||
Without something executable, the next hg command will try to run `tl` instead | ||||
of $tool (and fail). | ||||
#if windows | ||||
$ cat > dir/tool.bat <<EOF | ||||
> @sh -c "`pwd`/dir/tool.sh %1 %2" | ||||
> EOF | ||||
$ tool=`pwd`/dir/tool.bat | ||||
#else | ||||
$ tool=`pwd`/dir/tool.sh | ||||
#endif | ||||
Matt Harbison
|
r32212 | $ cat a | ||
changed | ||||
edited | ||||
Matt Harbison
|
r23150 | $ hg --debug tl --config extdiff.tl= --config merge-tools.tl.executable=$tool | ||
making snapshot of 2 files from rev * (glob) | ||||
a | ||||
b | ||||
making snapshot of 2 files from working directory | ||||
a | ||||
b | ||||
Matt Harbison
|
r32211 | running '$TESTTMP/a/dir/tool.bat a.* a' in */extdiff.* (glob) (windows !) | ||
running '$TESTTMP/a/dir/tool.sh a.* a' in */extdiff.* (glob) (no-windows !) | ||||
Matt Harbison
|
r23150 | ** custom diff ** | ||
Matt Harbison
|
r32212 | file changed while diffing. Overwriting: $TESTTMP/a/a (src: */extdiff.*/a/a) (glob) | ||
Matt Harbison
|
r23150 | cleaning up temp directory | ||
[1] | ||||
Matt Harbison
|
r32212 | $ cat a | ||
a | ||||
Matt Harbison
|
r23150 | |||
Matt Harbison
|
r32283 | #if execbit | ||
$ [ -x a ] | ||||
$ cat > 'dir/tool.sh' << 'EOF' | ||||
> #!/bin/sh | ||||
> chmod -x $2/a | ||||
> echo "** custom diff **" | ||||
> EOF | ||||
$ hg --debug tl --config extdiff.tl= --config merge-tools.tl.executable=$tool | ||||
making snapshot of 2 files from rev * (glob) | ||||
a | ||||
b | ||||
making snapshot of 2 files from working directory | ||||
a | ||||
b | ||||
running '$TESTTMP/a/dir/tool.sh a.* a' in */extdiff.* (glob) | ||||
** custom diff ** | ||||
file changed while diffing. Overwriting: $TESTTMP/a/a (src: */extdiff.*/a/a) (glob) | ||||
cleaning up temp directory | ||||
[1] | ||||
$ [ -x a ] | ||||
[1] | ||||
#endif | ||||
Patrick Mezard
|
r14021 | $ cd .. | ||
Adrian Buehlmann
|
r12304 | |||
Mads Kiilerich
|
r16899 | #if symlink | ||
Thomas Arendsen Hein
|
r14024 | Test symlinks handling (issue1909) | ||
Patrick Mezard
|
r14021 | $ hg init testsymlinks | ||
$ cd testsymlinks | ||||
$ echo a > a | ||||
$ hg ci -Am adda | ||||
adding a | ||||
$ echo a >> a | ||||
$ ln -s missing linka | ||||
$ hg add linka | ||||
$ hg falabala -r 0 --traceback | ||||
diffing testsymlinks.07f494440405 testsymlinks | ||||
[1] | ||||
$ cd .. | ||||
Mads Kiilerich
|
r16899 | |||
#endif | ||||
Matt Mackall
|
r29630 | |||
Test handling of non-ASCII paths in generated docstrings (issue5301) | ||||
>>> open("u", "w").write("\xa5\xa5") | ||||
$ U=`cat u` | ||||
$ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help -k xyzzy | ||||
abort: no matches | ||||
timeless
|
r29974 | (try 'hg help' for a list of topics) | ||
Matt Mackall
|
r29630 | [255] | ||
$ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help td > /dev/null | ||||
$ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help -k xyzzy | ||||
abort: no matches | ||||
timeless
|
r29974 | (try 'hg help' for a list of topics) | ||
Matt Mackall
|
r29630 | [255] | ||
Yuya Nishihara
|
r29723 | $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help td \ | ||
> | grep "^ '" | ||||
'\xa5\xa5' | ||||