##// END OF EJS Templates
narrow: fix flaky behavior described in issue6150...
narrow: fix flaky behavior described in issue6150 This has been plaguing the CI for a good while, and it doesn't appear to have an easy fix proposed yet. The solution in this change is to always do an unambiguous (but expensive) lookup in case of comparison. This should always be correct, albeit suboptimal. Differential Revision: https://phab.mercurial-scm.org/D10034

File last commit:

r47279:33350deb stable
r47280:b994db7c stable
Show More
test-diff-unified.t
481 lines | 8.3 KiB | text/troff | Tads3Lexer
$ hg init repo
$ cd repo
$ cat > a <<EOF
> c
> c
> a
> a
> b
> a
> a
> c
> c
> EOF
$ hg ci -Am adda
adding a
$ cat > a <<EOF
> c
> c
> a
> a
> dd
> a
> a
> c
> c
> EOF
default context
$ hg diff --nodates
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
invalid --unified
$ hg diff --nodates -U foo
abort: diff context lines count must be an integer, not 'foo'
[255]
$ hg diff --nodates -U 2
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -3,5 +3,5 @@
a
a
-b
+dd
a
a
$ hg --config diff.unified=2 diff --nodates
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -3,5 +3,5 @@
a
a
-b
+dd
a
a
$ hg diff --nodates -U 1
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -4,3 +4,3 @@
a
-b
+dd
a
invalid diff.unified
$ hg --config diff.unified=foo diff --nodates
abort: diff context lines count must be an integer, not 'foo'
[255]
noprefix config and option
$ hg --config diff.noprefix=True diff --nodates
diff -r cf9f4ba66af2 a
--- a
+++ a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
$ hg diff --noprefix --nodates
diff -r cf9f4ba66af2 a
--- a
+++ a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
noprefix config disabled in plain mode, but option still enabled
$ HGPLAIN=1 hg --config diff.noprefix=True diff --nodates
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
$ HGPLAIN=1 hg diff --noprefix --nodates
diff -r cf9f4ba66af2 a
--- a
+++ a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
$ cd ..
0 lines of context hunk header matches gnu diff hunk header
$ hg init diffzero
$ cd diffzero
$ cat > f1 << EOF
> c2
> c4
> c5
> EOF
$ hg commit -Am0
adding f1
$ cat > f2 << EOF
> c1
> c2
> c3
> c4
> EOF
$ mv f2 f1
$ hg diff -U0 --nodates
diff -r 55d8ff78db23 f1
--- a/f1
+++ b/f1
@@ -0,0 +1,1 @@
+c1
@@ -1,0 +3,1 @@
+c3
@@ -3,1 +4,0 @@
-c5
$ hg diff -U0 --nodates --git
diff --git a/f1 b/f1
--- a/f1
+++ b/f1
@@ -0,0 +1,1 @@
+c1
@@ -1,0 +3,1 @@
+c3
@@ -3,1 +4,0 @@
-c5
$ hg diff -U0 --nodates -p
diff -r 55d8ff78db23 f1
--- a/f1
+++ b/f1
@@ -0,0 +1,1 @@
+c1
@@ -1,0 +3,1 @@ c2
+c3
@@ -3,1 +4,0 @@ c4
-c5
$ echo a > f1
$ hg ci -m movef2
Test diff headers terminating with TAB when necessary (issue3357)
Regular diff --nodates, file creation
$ hg mv f1 'f 1'
$ echo b > 'f 1'
$ hg diff --nodates 'f 1'
diff -r 7574207d0d15 f 1
--- /dev/null
+++ b/f 1
@@ -0,0 +1,1 @@
+b
Git diff, adding space
$ hg diff --git
diff --git a/f1 b/f 1
rename from f1
rename to f 1
--- a/f1
+++ b/f 1
@@ -1,1 +1,1 @@
-a
+b
Git diff, adding extended headers
$ hg diff --git --config experimental.extendedheader.index=7 --config experimental.extendedheader.similarity=True
diff --git a/f1 b/f 1
similarity index 0%
rename from f1
rename to f 1
index 7898192..6178079 100644
--- a/f1
+++ b/f 1
@@ -1,1 +1,1 @@
-a
+b
$ hg diff --git --config experimental.extendedheader.index=-1
invalid length for extendedheader.index: '-1'
diff --git a/f1 b/f 1
rename from f1
rename to f 1
--- a/f1
+++ b/f 1
@@ -1,1 +1,1 @@
-a
+b
$ hg diff --git --config experimental.extendedheader.index=whatever
invalid value for extendedheader.index: 'whatever'
diff --git a/f1 b/f 1
rename from f1
rename to f 1
--- a/f1
+++ b/f 1
@@ -1,1 +1,1 @@
-a
+b
Git diff with noprefix
$ hg --config diff.noprefix=True diff --git --nodates
diff --git f1 f 1
rename from f1
rename to f 1
--- f1
+++ f 1
@@ -1,1 +1,1 @@
-a
+b
noprefix config disabled in plain mode, but option still enabled
$ HGPLAIN=1 hg --config diff.noprefix=True diff --git --nodates
diff --git a/f1 b/f 1
rename from f1
rename to f 1
--- a/f1
+++ b/f 1
@@ -1,1 +1,1 @@
-a
+b
$ HGPLAIN=1 hg diff --git --noprefix --nodates
diff --git f1 f 1
rename from f1
rename to f 1
--- f1
+++ f 1
@@ -1,1 +1,1 @@
-a
+b
Regular diff --nodates, file deletion
$ hg ci -m addspace
$ hg mv 'f 1' f1
$ echo a > f1
$ hg diff --nodates 'f 1'
diff -r ca50fe67c9c7 f 1
--- a/f 1
+++ /dev/null
@@ -1,1 +0,0 @@
-b
Git diff, removing space
$ hg diff --git
diff --git a/f 1 b/f1
rename from f 1
rename to f1
--- a/f 1
+++ b/f1
@@ -1,1 +1,1 @@
-b
+a
showfunc diff
$ cat > f1 << EOF
> int main() {
> int a = 0;
> int b = 1;
> int c = 2;
> int d = 3;
> return a + b + c + d;
> }
> EOF
$ hg commit -m addfunction
$ cat > f1 << EOF
> int main() {
> int a = 0;
> int b = 1;
> int c = 2;
> int e = 3;
> return a + b + c + e;
> }
> EOF
$ hg diff --git
diff --git a/f1 b/f1
--- a/f1
+++ b/f1
@@ -2,6 +2,6 @@
int a = 0;
int b = 1;
int c = 2;
- int d = 3;
- return a + b + c + d;
+ int e = 3;
+ return a + b + c + e;
}
$ hg diff --config diff.showfunc=True --git
diff --git a/f1 b/f1
--- a/f1
+++ b/f1
@@ -2,6 +2,6 @@ int main() {
int a = 0;
int b = 1;
int c = 2;
- int d = 3;
- return a + b + c + d;
+ int e = 3;
+ return a + b + c + e;
}
If [diff] git is set to true, but the user says --no-git, we should
*not* get git diffs
$ hg diff --nodates --config diff.git=1 --no-git
diff -r f2c7c817fa55 f1
--- a/f1
+++ b/f1
@@ -2,6 +2,6 @@
int a = 0;
int b = 1;
int c = 2;
- int d = 3;
- return a + b + c + d;
+ int e = 3;
+ return a + b + c + e;
}
$ cd ..
Long function names should be abbreviated, but multi-byte character shouldn't
be broken up
$ hg init longfunc
$ cd longfunc
>>> with open('a', 'wb') as f:
... f.write(b'a' * 39 + b'bb' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 0 b\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b'a' * 39 + b'\xc3\xa0' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 0 a with grave (single code point)\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b'a' * 39 + b'a\xcc\x80' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 0 a with grave (composition)\n') and None
... f.write(b' .\n' * 3) and None
$ hg ci -qAm0
>>> with open('a', 'wb') as f:
... f.write(b'a' * 39 + b'bb' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 1 b\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b'a' * 39 + b'\xc3\xa0' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 1 a with grave (single code point)\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b'a' * 39 + b'a\xcc\x80' + b'\n') and None
... f.write(b' .\n' * 3) and None
... f.write(b' 1 a with grave (composition)\n') and None
... f.write(b' .\n' * 3) and None
$ hg ci -m1
$ hg diff -c1 --nodates --show-function
diff -r 3e92dd6fa812 -r a256341606cb a
--- a/a
+++ b/a
@@ -2,7 +2,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
.
.
.
- 0 b
+ 1 b
.
.
.
@@ -10,7 +10,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\xc3\xa0 (esc)
.
.
.
- 0 a with grave (single code point)
+ 1 a with grave (single code point)
.
.
.
@@ -18,7 +18,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\xcc\x80 (esc)
.
.
.
- 0 a with grave (composition)
+ 1 a with grave (composition)
.
.
.
$ cd ..
Make sure `hg diff --git` differentiate "file did not exists" and "file is empty"
for git blob oids
$ hg init bloboids
$ cd bloboids
$ touch a
$ hg ci -Am "empty a"
adding a
$ hg diff -c 0 --git --config experimental.extendedheader.index=full | grep index
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
Make sure `hg diff --git` differentiate "file was empty" and "file is removed"
for git blob oids
$ rm a
$ hg ci -Am "removed a"
removing a
$ hg diff -c 1 --git --config experimental.extendedheader.index=full | grep index
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 100644
$ cd ..