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

r38268:d0abd794 @34 default
r39595:07b58266 default
Show More
test-treediscovery-legacy.t
372 lines | 9.1 KiB | text/troff | Tads3Lexer
/ tests / test-treediscovery-legacy.t
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 Tests discovery against servers without getbundle support:
$ cat >> $HGRCPATH <<EOF
> [ui]
> logtemplate="{rev} {node|short}: {desc} {branches}\n"
> EOF
$ cp $HGRCPATH $HGRCPATH-withcap
Pierre-Yves David
test-discovery-legacy: disable bundle2 for legacy test...
r25117 $ CAP="getbundle known changegroupsubset bundle2"
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ . "$TESTDIR/notcapable"
$ cp $HGRCPATH $HGRCPATH-nocap
$ cp $HGRCPATH-withcap $HGRCPATH
Joshua Redstone
discovery: convert legacy part of checkheads to revs from nodes...
r17011 Prep for test server without branchmap support
$ CAP="branchmap"
$ . "$TESTDIR/notcapable"
$ cp $HGRCPATH $HGRCPATH-nocap-branchmap
$ cp $HGRCPATH-withcap $HGRCPATH
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 Setup HTTP server control:
$ remote=http://localhost:$HGPORT/
$ export remote
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstart() {
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 > echo '[web]' > $1/.hg/hgrc
> echo 'push_ssl = false' >> $1/.hg/hgrc
> echo 'allow_push = *' >> $1/.hg/hgrc
> cp $HGRCPATH-nocap $HGRCPATH
> hg serve -R $1 -p $HGPORT -d --pid-file=hg.pid -E errors.log
> cat hg.pid >> $DAEMON_PIDS
> }
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop() {
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 > killdaemons.py
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 > cp $HGRCPATH-withcap $HGRCPATH
> }
Both are empty:
$ hg init empty1
$ hg init empty2
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstart empty2
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ hg incoming -R empty1 $remote
comparing with http://localhost:$HGPORT/
no changes found
[1]
$ hg outgoing -R empty1 $remote
comparing with http://localhost:$HGPORT/
no changes found
[1]
$ hg pull -R empty1 $remote
pulling from http://localhost:$HGPORT/
no changes found
$ hg push -R empty1 $remote
pushing to http://localhost:$HGPORT/
no changes found
Matt Mackall
push: return 1 if no changes found (issue3228)...
r16023 [1]
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411
Base repo:
$ hg init main
$ cd main
$ hg debugbuilddag -mo '+2:tbase @name1 +3:thead1 <tbase @name2 +4:thead2 @both /thead1 +2:tmaintip'
Martin Geisler
tests: don't load unnecessary graphlog extension...
r20117 $ hg log -G
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 o 11 a19bfa7e7328: r11 both
|
o 10 8b6bad1512e1: r10 both
|
o 9 025829e08038: r9 both
|\
| o 8 d8f638ac69e9: r8 name2
| |
| o 7 b6b4d315a2ac: r7 name2
| |
| o 6 6c6f5d5f3c11: r6 name2
| |
| o 5 70314b29987d: r5 name2
| |
o | 4 e71dbbc70e03: r4 name1
| |
o | 3 2c8d5d5ec612: r3 name1
| |
o | 2 a7892891da29: r2 name1
|/
o 1 0019a3b924fd: r1
|
o 0 d57206cc072a: r0
$ cd ..
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstart main
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411
Full clone:
$ hg clone main full
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd full
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg pull $remote
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
$ hg push $remote
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
Matt Mackall
push: return 1 if no changes found (issue3228)...
r16023 [1]
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ cd ..
Local is empty:
$ cd empty1
$ hg incoming $remote --rev name1
comparing with http://localhost:$HGPORT/
abort: cannot look up remote changes; remote repository does not support the 'changegroupsubset' capability!
[255]
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
0 d57206cc072a: r0
1 0019a3b924fd: r1
2 a7892891da29: r2 name1
3 2c8d5d5ec612: r3 name1
4 e71dbbc70e03: r4 name1
5 70314b29987d: r5 name2
6 6c6f5d5f3c11: r6 name2
7 b6b4d315a2ac: r7 name2
8 d8f638ac69e9: r8 name2
9 025829e08038: r9 both
10 8b6bad1512e1: r10 both
11 a19bfa7e7328: r11 both
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
no changes found
[1]
$ hg push $remote
pushing to http://localhost:$HGPORT/
no changes found
Matt Mackall
push: return 1 if no changes found (issue3228)...
r16023 [1]
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ hg pull $remote
pulling from http://localhost:$HGPORT/
requesting all changes
adding changesets
adding manifests
adding file changes
added 12 changesets with 24 changes to 2 files
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets d57206cc072a:a19bfa7e7328
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 (run 'hg update' to get a working copy)
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ cd ..
Local is subset:
$ cp $HGRCPATH-withcap $HGRCPATH
$ hg clone main subset --rev name2 ; cd subset
adding changesets
adding manifests
adding file changes
added 6 changesets with 12 changes to 2 files
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets d57206cc072a:d8f638ac69e9
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 updating to branch name2
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cp $HGRCPATH-nocap $HGRCPATH
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
6 a7892891da29: r2 name1
7 2c8d5d5ec612: r3 name1
8 e71dbbc70e03: r4 name1
9 025829e08038: r9 both
10 8b6bad1512e1: r10 both
11 a19bfa7e7328: r11 both
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg push $remote
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
Matt Mackall
push: return 1 if no changes found (issue3228)...
r16023 [1]
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ hg pull $remote
pulling from http://localhost:$HGPORT/
searching for changes
adding changesets
adding manifests
adding file changes
added 6 changesets with 12 changes to 2 files
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets a7892891da29:a19bfa7e7328
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 (run 'hg update' to get a working copy)
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ cd ..
Remote is empty:
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop ; tstart empty2
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ cd main
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
0 d57206cc072a: r0
1 0019a3b924fd: r1
2 a7892891da29: r2 name1
3 2c8d5d5ec612: r3 name1
4 e71dbbc70e03: r4 name1
5 70314b29987d: r5 name2
6 6c6f5d5f3c11: r6 name2
7 b6b4d315a2ac: r7 name2
8 d8f638ac69e9: r8 name2
9 025829e08038: r9 both
10 8b6bad1512e1: r10 both
11 a19bfa7e7328: r11 both
$ hg pull $remote
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
$ hg push $remote
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 12 changesets with 24 changes to 2 files
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ cd ..
Local is superset:
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ hg clone main subset2 --rev name2
adding changesets
adding manifests
adding file changes
added 6 changesets with 12 changes to 2 files
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets d57206cc072a:d8f638ac69e9
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 updating to branch name2
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstart subset2
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ cd main
$ hg incoming $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
2 a7892891da29: r2 name1
3 2c8d5d5ec612: r3 name1
4 e71dbbc70e03: r4 name1
9 025829e08038: r9 both
10 8b6bad1512e1: r10 both
11 a19bfa7e7328: r11 both
$ hg pull $remote
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
$ hg push $remote
pushing to http://localhost:$HGPORT/
searching for changes
abort: push creates new remote branches: both, name1!
(use 'hg push --new-branch' to create new remote branches)
[255]
$ hg push $remote --new-branch
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 6 changesets with 12 changes to 2 files
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ cd ..
Partial pull:
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop ; tstart main
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411 $ hg clone $remote partial --rev name2
abort: partial pull cannot be done because other repository doesn't support changegroupsubset.
[255]
$ hg init partial; cd partial
$ hg incoming $remote --rev name2
comparing with http://localhost:$HGPORT/
abort: cannot look up remote changes; remote repository does not support the 'changegroupsubset' capability!
[255]
$ hg pull $remote --rev name2
pulling from http://localhost:$HGPORT/
abort: partial pull cannot be done because other repository doesn't support changegroupsubset.
[255]
$ cd ..
Jim Hague
treediscovery: rename stop() in tests to fix failures on AIX....
r14831 $ tstop
Peter Arrenbrecht
tests: add tests for discovery/pull without cgsubset
r14411
Joshua Redstone
discovery: convert legacy part of checkheads to revs from nodes...
r17011 Exercise pushing to server without branchmap capability
$ cp $HGRCPATH-nocap-branchmap $HGRCPATH-nocap
$ hg init rlocal
$ cd rlocal
$ echo A > A
$ hg ci -Am A
adding A
$ cd ..
Mads Kiilerich
check-code: fix check for trailing whitespace on sh command lines...
r17345 $ hg clone rlocal rremote
Joshua Redstone
discovery: convert legacy part of checkheads to revs from nodes...
r17011 updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd rlocal
$ echo B > B
$ hg ci -Am B
adding B
$ cd ..
$ tstart rremote
$ cd rlocal
Mads Kiilerich
check-code: fix check for trailing whitespace on sh command lines...
r17345 $ hg incoming $remote
Joshua Redstone
discovery: convert legacy part of checkheads to revs from nodes...
r17011 comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
1 27547f69f254: B
$ hg pull $remote
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
Boris Feld
phases: use "published" in the phase movement message...
r38268 1 local changesets published
Joshua Redstone
discovery: convert legacy part of checkheads to revs from nodes...
r17011 $ hg push $remote
pushing to http://localhost:$HGPORT/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
$ hg outgoing $remote
comparing with http://localhost:$HGPORT/
searching for changes
no changes found
[1]
$ cd ..
$ tstop