##// END OF EJS Templates
httppeer: implement command executor for version 2 peer...
httppeer: implement command executor for version 2 peer Now that we have a new API for issuing commands which is compatible with wire protocol version 2, we can start using it with wire protocol version 2. This commit replaces our hacky implementation of _call() with something a bit more robust based on the new command executor interface. We now have proper support for issuing multiple commands per HTTP request. Each HTTP request maintains its own client reactor. The implementation is similar to the one in the legacy wire protocol. We use a ThreadPoolExecutor for spinning up a thread to read the HTTP response in the background. This allows responses to resolve in any order. While not implemented on the server yet, a client could use concurrent.futures.as_completed() with a collection of futures and handle responses as they arrive from the server. The return value from issued commands is still a simple list of raw or decoded CBOR data. This is still super hacky. We will want a rich data type for representing command responses. But at least this commit gets us one step closer to a proper peer implementation. Differential Revision: https://phab.mercurial-scm.org/D3297

File last commit:

r34192:e6b5e732 default
r37669:950294e2 default
Show More
test-show-stack.t
220 lines | 4.3 KiB | text/troff | Tads3Lexer
/ tests / test-show-stack.t
Gregory Szorc
show: implement "stack" view...
r33194 $ cat >> $HGRCPATH << EOF
> [extensions]
> show =
> EOF
$ hg init repo0
$ cd repo0
Empty repo / no checkout results in error
$ hg show stack
abort: stack view only available when there is a working directory
[255]
Stack displays single draft changeset as root revision
$ echo 0 > foo
$ hg -q commit -A -m 'commit 0'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
Stack displays multiple draft changesets
$ echo 1 > foo
$ hg commit -m 'commit 1'
$ echo 2 > foo
$ hg commit -m 'commit 2'
$ echo 3 > foo
$ hg commit -m 'commit 3'
$ echo 4 > foo
$ hg commit -m 'commit 4'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
o 181c commit 1
o 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
Public parent of draft base is displayed, separated from stack
$ hg phase --public -r 0
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 9f17 commit 0
Gregory Szorc
show: implement "stack" view...
r33194
$ hg phase --public -r 1
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 2737 commit 4
o d1a6 commit 3
o 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
Draft descendants are shown
$ hg -q up 2
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 2737 commit 4
o d1a6 commit 3
@ 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
$ hg -q up 3
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 2737 commit 4
@ d1a6 commit 3
o 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
working dir on public changeset should display special message
$ hg -q up 1
$ hg show stack
Gregory Szorc
show: tweak warning message...
r33205 (empty stack; working directory parent is a published changeset)
Gregory Szorc
show: implement "stack" view...
r33194
Branch point in descendants displayed at top of graph
$ hg -q up 3
$ echo b > foo
$ hg commit -m 'commit 5 (new dag branch)'
created new head
$ hg -q up 2
$ hg show stack
\ / (multiple children)
|
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o d1a6 commit 3
@ 128c commit 2
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 181c commit 1
Gregory Szorc
show: implement "stack" view...
r33194
$ cd ..
Base is stopped at merges
$ hg init merge-base
$ cd merge-base
$ echo 0 > foo
$ hg -q commit -A -m initial
$ echo h1 > foo
$ hg commit -m 'head 1'
$ hg -q up 0
$ echo h2 > foo
$ hg -q commit -m 'head 2'
$ hg phase --public -r 0:tip
$ hg -q up 1
$ hg merge -t :local 2
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m 'merge heads'
TODO doesn't yet handle case where wdir is a draft merge
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 8ee9 merge heads
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 5947 head 1
Gregory Szorc
show: implement "stack" view...
r33194
$ echo d1 > foo
$ hg commit -m 'draft 1'
$ echo d2 > foo
$ hg commit -m 'draft 2'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ 430d draft 2
o 787b draft 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o 8ee9 merge heads
Gregory Szorc
show: implement "stack" view...
r33194
$ cd ..
Now move on to stacks when there are more commits after the base branchpoint
$ hg init public-rebase
$ cd public-rebase
$ echo 0 > foo
$ hg -q commit -A -m 'base'
$ hg phase --public -r .
$ echo d1 > foo
$ hg commit -m 'draft 1'
$ echo d2 > foo
$ hg commit -m 'draft 2'
$ hg -q up 0
$ echo 1 > foo
$ hg commit -m 'new 1'
created new head
$ echo 2 > foo
$ hg commit -m 'new 2'
$ hg -q up 2
Newer draft heads don't impact output
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 @ eaff draft 2
o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 / (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
Newer public heads are rendered
$ hg phase --public -r '::tip'
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
Gregory Szorc
show: implement "stack" view...
r33194 / (2 commits ahead)
:
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
If rebase is available, we show a hint how to rebase to that head
$ hg --config extensions.rebase= show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
/ (2 commits ahead; hg rebase --source 2b21 --dest baa4)
Gregory Szorc
show: implement "stack" view...
r33194 :
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
Similar tests but for multiple heads
$ hg -q up 0
$ echo h2 > foo
$ hg -q commit -m 'new head 2'
$ hg phase --public -r .
$ hg -q up 2
$ hg show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
Gregory Szorc
show: implement "stack" view...
r33194 / (2 commits ahead)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : o 9a84 new head 2
Gregory Szorc
show: implement "stack" view...
r33194 :/ (1 commits ahead)
:
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base
Gregory Szorc
show: implement "stack" view...
r33194
$ hg --config extensions.rebase= show stack
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o baa4 new 2
/ (2 commits ahead; hg rebase --source 2b21 --dest baa4)
: o 9a84 new head 2
:/ (1 commits ahead; hg rebase --source 2b21 --dest 9a84)
Gregory Szorc
show: implement "stack" view...
r33194 :
: (stack head)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 : @ eaff draft 2
: o 2b21 draft 1
Gregory Szorc
show: implement "stack" view...
r33194 :/ (stack base)
Gregory Szorc
show: use consistent (and possibly shorter) node lengths...
r34192 o b66b base