##// 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:

r35722:41ef02ba default
r39595:07b58266 default
Show More
test-convert-svn-sink.t
468 lines | 8.4 KiB | text/troff | Tads3Lexer
/ tests / test-convert-svn-sink.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require svn13
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ svnupanddisplay()
> {
> (
> cd $1;
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 > svn up -q;
Mads Kiilerich
tests: cleanup of svn url handling...
r17033 > svn st -v | sed 's/ */ /g' | sort
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 > limit=''
> if [ $2 -gt 0 ]; then
> limit="--limit=$2"
> fi
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 > svn log --xml -v $limit | $PYTHON "$TESTDIR/svnxml.py"
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 > )
> }
Martin Geisler
tests: don't overwrite HGRCPATH...
r13519 $ cat >> $HGRCPATH <<EOF
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 > [extensions]
Mads Kiilerich
check-code: fix check for trailing whitespace on continued lines too...
r17347 > convert =
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 > EOF
$ hg init a
Add
$ echo a > a/a
$ mkdir -p a/d1/d2
$ echo b > a/d1/d2/b
$ hg --cwd a ci -d '0 0' -A -m 'add a file'
adding a
adding d1/d2/b
Modify
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ svn-safe-append.py a a/a
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd a ci -d '1 0' -m 'modify a file'
$ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 1:e0e2b8a9156b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ hg convert -d svn a
assuming destination a-hg
initializing svn repository 'a-hg'
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
1 add a file
0 modify a file
$ svnupanddisplay a-hg-wc 2
2 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 2 1 test d1/d2
2 1 test d1/d2/b
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 2 2 test .
2 2 test a
revision: 2
author: test
msg: modify a file
M /a
revision: 1
author: test
msg: add a file
A /a
A /d1
A /d1/d2
A /d1/d2/b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ ls a a-hg-wc
a:
a
d1
a-hg-wc:
a
d1
$ cmp a/a a-hg-wc/a
Rename
$ hg --cwd a mv a b
$ hg --cwd a ci -d '2 0' -m 'rename a file'
$ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 2:eb5169441d43
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ hg convert -d svn a
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 rename a file
$ svnupanddisplay a-hg-wc 1
3 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 3 1 test d1/d2
3 1 test d1/d2/b
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 3 3 test .
3 3 test b
revision: 3
author: test
msg: rename a file
D /a
A /b (from /a@2)
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ ls a a-hg-wc
a:
b
d1
a-hg-wc:
b
d1
Copy
$ hg --cwd a cp b c
$ hg --cwd a ci -d '3 0' -m 'copy a file'
$ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 3:60effef6ab48
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ hg convert -d svn a
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 copy a file
$ svnupanddisplay a-hg-wc 1
4 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 4 1 test d1/d2
4 1 test d1/d2/b
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 4 3 test b
4 4 test .
4 4 test c
revision: 4
author: test
msg: copy a file
A /c (from /b@3)
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ ls a a-hg-wc
a:
b
c
d1
a-hg-wc:
b
c
d1
$ hg --cwd a rm b
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Remove
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd a ci -d '4 0' -m 'remove a file'
$ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 4:87bbe3013fb6
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ hg convert -d svn a
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 remove a file
$ svnupanddisplay a-hg-wc 1
5 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 5 1 test d1/d2
5 1 test d1/d2/b
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 5 4 test c
5 5 test .
revision: 5
author: test
msg: remove a file
D /b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ ls a a-hg-wc
a:
c
d1
a-hg-wc:
c
d1
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 Executable
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ chmod +x a/c
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #else
$ echo fake >> a/c
#endif
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd a ci -d '5 0' -m 'make a file executable'
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 5:ff42e473c340
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #else
$ hg --cwd a tip -q
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 5:817a700c8cf1
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #endif
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
$ hg convert -d svn a
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 make a file executable
$ svnupanddisplay a-hg-wc 1
6 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 6 1 test d1/d2
6 1 test d1/d2/b
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 6 6 test .
6 6 test c
revision: 6
author: test
msg: make a file executable
M /c
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ test -x a-hg-wc/c
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #endif
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909
#if symlink
Symlinks
$ ln -s a/missing a/link
$ hg --cwd a commit -Am 'add symlink'
adding link
$ hg --cwd a mv link newlink
$ hg --cwd a commit -m 'move symlink'
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098 $ hg convert -d svn a a-svnlink
initializing svn repository 'a-svnlink'
initializing svn working copy 'a-svnlink-wc'
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 scanning source...
sorting...
converting...
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098 7 add a file
6 modify a file
5 rename a file
4 copy a file
3 remove a file
2 make a file executable
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 1 add symlink
0 move symlink
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098 $ svnupanddisplay a-svnlink-wc 1
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 8 1 test d1
8 1 test d1/d2
8 1 test d1/d2/b
8 6 test c
8 8 test .
8 8 test newlink
revision: 8
author: test
msg: move symlink
D /link
A /newlink (from /link@7)
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098 Make sure our changes don't affect the rest of the test cases
$ hg --cwd a up 5
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg --cwd a --config extensions.strip= strip -r 6
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 saved backup bundle to $TESTTMP/a/.hg/strip-backup/bd4f7b7a7067-ed505e42-backup.hg
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909 #endif
Mads Kiilerich
convert: introduce --full for converting all files...
r22300 Convert with --full adds and removes files that didn't change
$ touch a/f
$ hg -R a ci -Aqmf
$ echo "rename c d" > filemap
$ hg convert -d svn a --filemap filemap --full
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 f
$ svnupanddisplay a-hg-wc 1
Matt Mackall
test-convert-svn-sink: properly isolate symlink section...
r23098 7 7 test .
7 7 test d
7 7 test f
revision: 7
Mads Kiilerich
convert: introduce --full for converting all files...
r22300 author: test
msg: f
D /c
A /d
D /d1
A /f
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 $ rm -rf a a-hg a-hg-wc
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
Mads Kiilerich
tests: remove 'hghave symlink' from test-convert-svn-sink.t...
r16909
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 Executable in new directory
$ hg init a
$ mkdir a/d1
$ echo a > a/d1/a
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ chmod +x a/d1/a
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #else
$ echo fake >> a/d1/a
#endif
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd a ci -d '0 0' -A -m 'add executable file in new directory'
adding d1/a
$ hg convert -d svn a
assuming destination a-hg
initializing svn repository 'a-hg'
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 add executable file in new directory
$ svnupanddisplay a-hg-wc 1
1 1 test .
1 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 1 1 test d1/a
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 revision: 1
author: test
msg: add executable file in new directory
A /d1
A /d1/a
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ test -x a-hg-wc/d1/a
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #endif
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
Copy to new directory
$ mkdir a/d2
$ hg --cwd a cp d1/a d2/a
$ hg --cwd a ci -d '1 0' -A -m 'copy file to new directory'
$ hg convert -d svn a
assuming destination a-hg
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
0 copy file to new directory
$ svnupanddisplay a-hg-wc 1
2 1 test d1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 2 1 test d1/a
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 2 2 test .
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 2 2 test d2
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 2 2 test d2/a
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 revision: 2
author: test
msg: copy file to new directory
A /d2
A /d2/a (from /d1/a@1)
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
Branchy history
$ hg init b
$ echo base > b/b
$ hg --cwd b ci -d '0 0' -Ambase
adding b
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ svn-safe-append.py left-1 b/b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ echo left-1 > b/left-1
$ hg --cwd b ci -d '1 0' -Amleft-1
adding left-1
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ svn-safe-append.py left-2 b/b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ echo left-2 > b/left-2
$ hg --cwd b ci -d '2 0' -Amleft-2
adding left-2
$ hg --cwd b up 0
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ svn-safe-append.py right-1 b/b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ echo right-1 > b/right-1
$ hg --cwd b ci -d '3 0' -Amright-1
adding right-1
created new head
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ svn-safe-append.py right-2 b/b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ echo right-2 > b/right-2
$ hg --cwd b ci -d '4 0' -Amright-2
adding right-2
$ hg --cwd b up -C 2
3 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg --cwd b merge
merging b
Siddharth Agarwal
simplemerge: move conflict warning message to filemerge...
r26614 warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 2 files updated, 0 files merged, 0 files removed, 1 files unresolved
Pulkit Goyal
merge: add `--abort` flag which can abort the merge...
r35722 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 [1]
$ hg --cwd b revert -r 2 b
Mads Kiilerich
tests: convert some 'hghave no-outer-repo' to #if...
r17014 $ hg --cwd b resolve -m b
Pierre-Yves David
resolve: add parenthesis around "no more unresolved files" message...
r21947 (no more unresolved files)
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ hg --cwd b ci -d '5 0' -m 'merge'
Expect 4 changes
$ hg convert -d svn b
assuming destination b-hg
initializing svn repository 'b-hg'
initializing svn working copy 'b-hg-wc'
scanning source...
sorting...
converting...
5 base
4 left-1
3 left-2
2 right-1
1 right-2
0 merge
$ svnupanddisplay b-hg-wc 0
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 4 2 test left-1
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 4 3 test b
4 3 test left-2
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 4 4 test .
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 4 4 test right-1
4 4 test right-2
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 revision: 4
author: test
msg: merge
A /right-1
A /right-2
revision: 3
author: test
msg: left-2
M /b
A /left-2
revision: 2
author: test
msg: left-1
M /b
A /left-1
revision: 1
author: test
msg: base
A /b
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370
Tags are not supported, but must not break conversion
$ rm -rf a a-hg a-hg-wc
$ hg init a
$ echo a > a/a
$ hg --cwd a ci -d '0 0' -A -m 'Add file a'
adding a
$ hg --cwd a tag -d '1 0' -m 'Tagged as v1.0' v1.0
$ hg convert -d svn a
assuming destination a-hg
initializing svn repository 'a-hg'
initializing svn working copy 'a-hg-wc'
scanning source...
sorting...
converting...
1 Add file a
0 Tagged as v1.0
writing Subversion tags is not yet implemented
$ svnupanddisplay a-hg-wc 2
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 2 1 test a
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 2 2 test .
2 2 test .hgtags
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 revision: 2
author: test
msg: Tagged as v1.0
A /.hgtags
revision: 1
author: test
msg: Add file a
A /a
Dan Villiom Podlaski Christiansen
tests: unify test-convert-svn-*
r12370 $ rm -rf a a-hg a-hg-wc