##// END OF EJS Templates
wireprotov2: implement commands as a generator of objects...
wireprotov2: implement commands as a generator of objects Previously, wire protocol version 2 inherited version 1's model of having separate types to represent the results of different wire protocol commands. As I implemented more powerful commands in future commits, I found I was using a common pattern of returning a special type to hold a generator. This meant the command function required a closure to do most of the work. That made logic flow more difficult to follow. I also noticed that many commands were effectively a sequence of objects to be CBOR encoded. I think it makes sense to define version 2 commands as generators. This way, commands can simply emit the data structures they wish to send to the client. This eliminates the need for a closure in command functions and removes encoding from the bodies of commands. As part of this commit, the handling of response objects has been moved into the serverreactor class. This puts the reactor in the driver's seat with regards to CBOR encoding and error handling. Having error handling in the function that emits frames is particularly important because exceptions in that function can lead to things getting in a bad state: I'm fairly certain that uncaught exceptions in the frame generator were causing deadlocks. I also introduced a dedicated error type for explicit error reporting in command handlers. This will be used in subsequent commits. There's still a bit of work to be done here, especially around formalizing the error handling "protocol." I've added yet another TODO to track this so we don't forget. Test output changed because we're using generators and no longer know we are at the end of the data until we hit the end of the generator. This means we can't emit the end-of-stream flag until we've exhausted the generator. Hence the introduction of 0-sized end-of-stream frames. Differential Revision: https://phab.mercurial-scm.org/D4472

File last commit:

r37387:22f19da5 default
r39595:07b58266 default
Show More
test-diff-unified.t
458 lines | 7.6 KiB | text/troff | Tads3Lexer
/ tests / test-diff-unified.t
Adrian Buehlmann
tests: unify test-diff-unified
r12141 $ 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'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Adrian Buehlmann
tests: unify test-diff-unified
r12141
$ 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'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Adrian Buehlmann
tests: unify test-diff-unified
r12141
Siddharth Agarwal
diff: add a --noprefix option...
r23298 noprefix config and option
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
$ hg --config diff.noprefix=True diff --nodates
diff -r cf9f4ba66af2 a
Siddharth Agarwal
mdiff.unidiff: add support for noprefix
r23299 --- a
+++ a
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297 @@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
Siddharth Agarwal
diff: add a --noprefix option...
r23298 $ hg diff --noprefix --nodates
diff -r cf9f4ba66af2 a
Siddharth Agarwal
mdiff.unidiff: add support for noprefix
r23299 --- a
+++ a
Siddharth Agarwal
diff: add a --noprefix option...
r23298 @@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
Siddharth Agarwal
diff: add a --noprefix option...
r23298 noprefix config disabled in plain mode, but option still enabled
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
$ 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
Siddharth Agarwal
diff: add a --noprefix option...
r23298 $ HGPLAIN=1 hg diff --noprefix --nodates
diff -r cf9f4ba66af2 a
Siddharth Agarwal
mdiff.unidiff: add support for noprefix
r23299 --- a
+++ a
Siddharth Agarwal
diff: add a --noprefix option...
r23298 @@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
Mads Kiilerich
tests: cleanup of tests that got lost in their own nested directories...
r16912 $ cd ..
Nicolas Venegas
mdiff/patch: fix bad hunk handling for unified diffs with zero context...
r15462 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
Adrian Buehlmann
tests: unify test-diff-unified
r12141
Nicolas Venegas
mdiff/patch: fix bad hunk handling for unified diffs with zero context...
r15462 $ 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
Patrick Mezard
mdiff: fix diff header generation for files with spaces (issue3357)...
r16362
$ 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
Sean Farley
patch: use opt.showsimilarity to calculate and show the similarity...
r30807 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
Yuya Nishihara
patch: check length of git index header only if integer is specified...
r30819 $ 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
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297 Git diff with noprefix
$ hg --config diff.noprefix=True diff --git --nodates
Siddharth Agarwal
patch.trydiff: add support for noprefix
r23300 diff --git f1 f 1
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297 rename from f1
rename to f 1
Siddharth Agarwal
mdiff.unidiff: add support for noprefix
r23299 --- f1
+++ f 1
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297 @@ -1,1 +1,1 @@
-a
+b
Siddharth Agarwal
diff: add a --noprefix option...
r23298 noprefix config disabled in plain mode, but option still enabled
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
$ 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
Siddharth Agarwal
diff: add a --noprefix option...
r23298 $ HGPLAIN=1 hg diff --git --noprefix --nodates
Siddharth Agarwal
patch.trydiff: add support for noprefix
r23300 diff --git f1 f 1
Siddharth Agarwal
diff: add a --noprefix option...
r23298 rename from f1
rename to f 1
Siddharth Agarwal
mdiff.unidiff: add support for noprefix
r23299 --- f1
+++ f 1
Siddharth Agarwal
diff: add a --noprefix option...
r23298 @@ -1,1 +1,1 @@
-a
+b
Siddharth Agarwal
patch.diffopts: add support for noprefix...
r23297
Patrick Mezard
mdiff: fix diff header generation for files with spaces (issue3357)...
r16362 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
Mads Kiilerich
tests: cleanup of tests that got lost in their own nested directories...
r16912
Mathias De Maré
tests: add testing for diff.showfunc...
r24496 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;
}
Augie Fackler
diffopts: notice a negated boolean flag in diffopts...
r29948 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;
}
Mads Kiilerich
tests: cleanup of tests that got lost in their own nested directories...
r16912 $ cd ..
Yuya Nishihara
diff: do not split function name if character encoding is unknown...
r36432
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:
Pulkit Goyal
py3: suppress output from f.write() function class...
r37387 ... 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
Yuya Nishihara
diff: do not split function name if character encoding is unknown...
r36432 $ hg ci -qAm0
>>> with open('a', 'wb') as f:
Pulkit Goyal
py3: suppress output from f.write() function class...
r37387 ... 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
Yuya Nishihara
diff: do not split function name if character encoding is unknown...
r36432 $ 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 ..