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

r37360:4e6a6d0d default
r39595:07b58266 default
Show More
test-debugextensions.t
107 lines | 2.2 KiB | text/troff | Tads3Lexer
/ tests / test-debugextensions.t
Gregory Szorc
tests: conditionalize tests based on presence of custom extensions...
r37360 #if no-extraextensions
liscju
mercurial: add debugextensions command (issue4676)...
r26351 $ hg debugextensions
Gregory Szorc
tests: conditionalize tests based on presence of custom extensions...
r37360 #endif
liscju
mercurial: add debugextensions command (issue4676)...
r26351
$ debugpath=`pwd`/extwithoutinfos.py
$ cat > extwithoutinfos.py <<EOF
> EOF
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 $ cat > extwithinfos.py <<EOF
Augie Fackler
py3: add missing b prefixes in test-debugextensions.t...
r36585 > testedwith = b'3.0 3.1 3.2.1'
> buglink = b'https://example.org/bts'
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 > EOF
liscju
mercurial: add debugextensions command (issue4676)...
r26351
$ cat >> $HGRCPATH <<EOF
> [extensions]
> histedit=
> patchbomb=
> rebase=
> mq=
> ext1 = $debugpath
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 > ext2 = `pwd`/extwithinfos.py
liscju
mercurial: add debugextensions command (issue4676)...
r26351 > EOF
Gregory Szorc
tests: conditionalize tests based on presence of custom extensions...
r37360 $ for extension in $HGTESTEXTRAEXTENSIONS; do
> echo "$extension=!" >> $HGRCPATH
> done
liscju
mercurial: add debugextensions command (issue4676)...
r26351 $ hg debugextensions
ext1 (untested!)
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 ext2 (3.2.1!)
liscju
mercurial: add debugextensions command (issue4676)...
r26351 histedit
mq
patchbomb
rebase
$ hg debugextensions -v
ext1
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 location: */extwithoutinfos.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: no
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 ext2
location: */extwithinfos.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: no
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 tested with: 3.0 3.1 3.2.1
bug reporting: https://example.org/bts
liscju
mercurial: add debugextensions command (issue4676)...
r26351 histedit
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 location: */hgext/histedit.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: yes
liscju
mercurial: add debugextensions command (issue4676)...
r26351 mq
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 location: */hgext/mq.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: yes
liscju
mercurial: add debugextensions command (issue4676)...
r26351 patchbomb
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 location: */hgext/patchbomb.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: yes
liscju
mercurial: add debugextensions command (issue4676)...
r26351 rebase
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 location: */hgext/rebase.py* (glob)
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 bundled: yes
liscju
mercurial: add debugextensions command (issue4676)...
r26351
Matt Harbison
test-debugextensions: sanitize JSON output for Windows...
r26430 $ hg debugextensions -Tjson | sed 's|\\\\|/|g'
liscju
mercurial: add debugextensions command (issue4676)...
r26351 [
{
"buglink": "",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": false,
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "name": "ext1",
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 "source": "*/extwithoutinfos.py*", (glob)
Yuya Nishihara
debugextension: change "testedwith" to a list (BC)...
r29703 "testedwith": []
liscju
mercurial: add debugextensions command (issue4676)...
r26351 },
{
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 "buglink": "https://example.org/bts",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": false,
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 "name": "ext2",
"source": "*/extwithinfos.py*", (glob)
"testedwith": ["3.0", "3.1", "3.2.1"]
},
{
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "buglink": "",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": true,
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "name": "histedit",
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 "source": "*/hgext/histedit.py*", (glob)
Yuya Nishihara
debugextensions: hide "ships-with-hg-core" magic string (BC)...
r29893 "testedwith": []
liscju
mercurial: add debugextensions command (issue4676)...
r26351 },
{
"buglink": "",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": true,
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "name": "mq",
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 "source": "*/hgext/mq.py*", (glob)
Yuya Nishihara
debugextensions: hide "ships-with-hg-core" magic string (BC)...
r29893 "testedwith": []
liscju
mercurial: add debugextensions command (issue4676)...
r26351 },
{
"buglink": "",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": true,
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "name": "patchbomb",
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 "source": "*/hgext/patchbomb.py*", (glob)
Yuya Nishihara
debugextensions: hide "ships-with-hg-core" magic string (BC)...
r29893 "testedwith": []
liscju
mercurial: add debugextensions command (issue4676)...
r26351 },
{
"buglink": "",
Yuya Nishihara
debugextensions: show ships-with-hg-core state as a separate field...
r29892 "bundled": true,
liscju
mercurial: add debugextensions command (issue4676)...
r26351 "name": "rebase",
Kevin Bullock
test-debugextensions: passes with byte-compilation disabled (issue5147)
r28615 "source": "*/hgext/rebase.py*", (glob)
Yuya Nishihara
debugextensions: hide "ships-with-hg-core" magic string (BC)...
r29893 "testedwith": []
liscju
mercurial: add debugextensions command (issue4676)...
r26351 }
]
Yuya Nishihara
debugextension: change "testedwith" to a list (BC)...
r29703
Yuya Nishihara
test-debugextensions: add dummy extension to make ifcontains() test more solid...
r29891 $ hg debugextensions -T '{ifcontains("3.1", testedwith, "{name}\n")}'
ext2
$ hg debugextensions \
> -T '{ifcontains("3.2", testedwith, "no substring match: {name}\n")}'