Show More
@@ -73,6 +73,7 b' from . import (' | |||||
73 | url as urlmod, |
|
73 | url as urlmod, | |
74 | util, |
|
74 | util, | |
75 | vfs as vfsmod, |
|
75 | vfs as vfsmod, | |
|
76 | wireprotoserver, | |||
76 | ) |
|
77 | ) | |
77 |
|
78 | |||
78 | release = lockmod.release |
|
79 | release = lockmod.release | |
@@ -2230,6 +2231,37 b' def debugrevspec(ui, repo, expr, **opts)' | |||||
2230 | for c in revs: |
|
2231 | for c in revs: | |
2231 | ui.write("%d\n" % c) |
|
2232 | ui.write("%d\n" % c) | |
2232 |
|
2233 | |||
|
2234 | @command('debugserve', [ | |||
|
2235 | ('', 'sshstdio', False, _('run an SSH server bound to process handles')), | |||
|
2236 | ('', 'logiofd', '', _('file descriptor to log server I/O to')), | |||
|
2237 | ('', 'logiofile', '', _('file to log server I/O to')), | |||
|
2238 | ], '') | |||
|
2239 | def debugserve(ui, repo, **opts): | |||
|
2240 | """run a server with advanced settings | |||
|
2241 | ||||
|
2242 | This command is similar to :hg:`serve`. It exists partially as a | |||
|
2243 | workaround to the fact that ``hg serve --stdio`` must have specific | |||
|
2244 | arguments for security reasons. | |||
|
2245 | """ | |||
|
2246 | opts = pycompat.byteskwargs(opts) | |||
|
2247 | ||||
|
2248 | if not opts['sshstdio']: | |||
|
2249 | raise error.Abort(_('only --sshstdio is currently supported')) | |||
|
2250 | ||||
|
2251 | logfh = None | |||
|
2252 | ||||
|
2253 | if opts['logiofd'] and opts['logiofile']: | |||
|
2254 | raise error.Abort(_('cannot use both --logiofd and --logiofile')) | |||
|
2255 | ||||
|
2256 | if opts['logiofd']: | |||
|
2257 | # Line buffered because output is line based. | |||
|
2258 | logfh = os.fdopen(int(opts['logiofd']), 'ab', 1) | |||
|
2259 | elif opts['logiofile']: | |||
|
2260 | logfh = open(opts['logiofile'], 'ab', 1) | |||
|
2261 | ||||
|
2262 | s = wireprotoserver.sshserver(ui, repo, logfh=logfh) | |||
|
2263 | s.serve_forever() | |||
|
2264 | ||||
2233 | @command('debugsetparents', [], _('REV1 [REV2]')) |
|
2265 | @command('debugsetparents', [], _('REV1 [REV2]')) | |
2234 | def debugsetparents(ui, repo, rev1, rev2=None): |
|
2266 | def debugsetparents(ui, repo, rev1, rev2=None): | |
2235 | """manually set the parents of the current working directory |
|
2267 | """manually set the parents of the current working directory |
@@ -111,6 +111,7 b' Show debug commands if there are no othe' | |||||
111 | debugrename |
|
111 | debugrename | |
112 | debugrevlog |
|
112 | debugrevlog | |
113 | debugrevspec |
|
113 | debugrevspec | |
|
114 | debugserve | |||
114 | debugsetparents |
|
115 | debugsetparents | |
115 | debugssl |
|
116 | debugssl | |
116 | debugsub |
|
117 | debugsub | |
@@ -291,6 +292,7 b' Show all commands + options' | |||||
291 | debugrename: rev |
|
292 | debugrename: rev | |
292 | debugrevlog: changelog, manifest, dir, dump |
|
293 | debugrevlog: changelog, manifest, dir, dump | |
293 | debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized |
|
294 | debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized | |
|
295 | debugserve: sshstdio, logiofd, logiofile | |||
294 | debugsetparents: |
|
296 | debugsetparents: | |
295 | debugssl: |
|
297 | debugssl: | |
296 | debugsub: rev |
|
298 | debugsub: rev |
@@ -967,6 +967,7 b' Test list of internal help commands' | |||||
967 | debugrename dump rename information |
|
967 | debugrename dump rename information | |
968 | debugrevlog show data and statistics about a revlog |
|
968 | debugrevlog show data and statistics about a revlog | |
969 | debugrevspec parse and apply a revision specification |
|
969 | debugrevspec parse and apply a revision specification | |
|
970 | debugserve run a server with advanced settings | |||
970 | debugsetparents |
|
971 | debugsetparents | |
971 | manually set the parents of the current working directory |
|
972 | manually set the parents of the current working directory | |
972 | debugssl test a secure connection to a server |
|
973 | debugssl test a secure connection to a server |
@@ -39,6 +39,43 b' Server should answer the "hello" command' | |||||
39 | 384 |
|
39 | 384 | |
40 | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN |
|
40 | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | |
41 |
|
41 | |||
|
42 | `hg debugserve --sshstdio` works | |||
|
43 | ||||
|
44 | $ cd server | |||
|
45 | $ hg debugserve --sshstdio << EOF | |||
|
46 | > hello | |||
|
47 | > EOF | |||
|
48 | 384 | |||
|
49 | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | |||
|
50 | ||||
|
51 | I/O logging works | |||
|
52 | ||||
|
53 | $ hg debugserve --sshstdio --logiofd 1 << EOF | |||
|
54 | > hello | |||
|
55 | > EOF | |||
|
56 | o> write(4) -> None: | |||
|
57 | o> 384\n | |||
|
58 | o> write(384) -> None: | |||
|
59 | o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n | |||
|
60 | 384 | |||
|
61 | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | |||
|
62 | o> flush() -> None | |||
|
63 | ||||
|
64 | $ hg debugserve --sshstdio --logiofile $TESTTMP/io << EOF | |||
|
65 | > hello | |||
|
66 | > EOF | |||
|
67 | 384 | |||
|
68 | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | |||
|
69 | ||||
|
70 | $ cat $TESTTMP/io | |||
|
71 | o> write(4) -> None: | |||
|
72 | o> 384\n | |||
|
73 | o> write(384) -> None: | |||
|
74 | o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n | |||
|
75 | o> flush() -> None | |||
|
76 | ||||
|
77 | $ cd .. | |||
|
78 | ||||
42 | >=0.9.1 clients send a "hello" + "between" for the null range as part of handshake. |
|
79 | >=0.9.1 clients send a "hello" + "between" for the null range as part of handshake. | |
43 | Server should reply with capabilities and should send "1\n\n" as a successful |
|
80 | Server should reply with capabilities and should send "1\n\n" as a successful | |
44 | reply with empty response to the "between". |
|
81 | reply with empty response to the "between". |
General Comments 0
You need to be logged in to leave comments.
Login now