diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -2683,6 +2683,21 @@ Read a line of output from the server. If there are multiple output pipes, reads only the main pipe. + + ereadline + --------- + + Like ``readline``, but read from the stderr pipe, if available. + + read + -------- + + ``read()`` N bytes from the server's main output pipe. + + eread + --------- + + ``read()`` N bytes from the server's stderr pipe, if available. """ opts = pycompat.byteskwargs(opts) @@ -2831,6 +2846,14 @@ util.readpipe(stderr) elif action == 'readline': stdout.readline() + elif action == 'ereadline': + stderr.readline() + elif action.startswith('read '): + count = int(action.split(' ', 1)[1]) + stdout.read(count) + elif action.startswith('eread '): + count = int(action.split(' ', 1)[1]) + stderr.read(count) else: raise error.Abort(_('unknown action: %s') % action) diff --git a/tests/test-ssh-proto-unbundle.t b/tests/test-ssh-proto-unbundle.t --- a/tests/test-ssh-proto-unbundle.t +++ b/tests/test-ssh-proto-unbundle.t @@ -45,7 +45,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 115 > EOF testing ssh1 creating ssh peer from handshake results @@ -93,7 +93,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 115: + e> read(115) -> 115: e> abort: incompatible Mercurial client; bundle2 required\n e> (see https://www.mercurial-scm.org/wiki/IncompatibleClient)\n @@ -143,7 +143,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 115: + e> read(115) -> 115: e> abort: incompatible Mercurial client; bundle2 required\n e> (see https://www.mercurial-scm.org/wiki/IncompatibleClient)\n @@ -212,7 +212,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 196 > EOF testing ssh1 creating ssh peer from handshake results @@ -260,7 +260,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 196: + e> read(196) -> 196: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -316,7 +316,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 196: + e> read(196) -> 196: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -338,7 +338,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 218 > EOF testing ssh1 creating ssh peer from handshake results @@ -386,7 +386,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 218: + e> read(218) -> 218: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -443,7 +443,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 218: + e> read(218) -> 218: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -466,7 +466,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 202 > EOF testing ssh1 creating ssh peer from handshake results @@ -514,7 +514,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 202: + e> read(202) -> 202: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -570,7 +570,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 202: + e> read(202) -> 202: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -592,7 +592,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 206 > EOF testing ssh1 creating ssh peer from handshake results @@ -640,7 +640,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 206: + e> read(206) -> 206: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -697,7 +697,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 206: + e> read(206) -> 206: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -720,7 +720,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 232 > EOF testing ssh1 creating ssh peer from handshake results @@ -768,7 +768,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 232: + e> read(232) -> 232: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -827,7 +827,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 232: + e> read(232) -> 232: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -852,7 +852,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 193 > EOF testing ssh1 creating ssh peer from handshake results @@ -900,7 +900,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 193: + e> read(193) -> 193: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -956,7 +956,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 193: + e> read(193) -> 193: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -978,7 +978,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 218 > EOF testing ssh1 creating ssh peer from handshake results @@ -1026,7 +1026,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 218: + e> read(218) -> 218: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1085,7 +1085,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 218: + e> read(218) -> 218: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1110,7 +1110,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 216 > EOF testing ssh1 creating ssh peer from handshake results @@ -1158,7 +1158,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 216: + e> read(216) -> 216: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1217,7 +1217,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 216: + e> read(216) -> 216: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1248,7 +1248,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 212 > EOF testing ssh1 creating ssh peer from handshake results @@ -1296,7 +1296,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 212: + e> read(212) -> 212: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1353,7 +1353,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 212: + e> read(212) -> 212: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1377,7 +1377,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 212 > EOF testing ssh1 creating ssh peer from handshake results @@ -1425,7 +1425,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 212: + e> read(212) -> 212: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1482,7 +1482,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 212: + e> read(212) -> 212: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1508,7 +1508,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 230 > EOF testing ssh1 creating ssh peer from handshake results @@ -1556,7 +1556,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 230: + e> read(230) -> 230: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1615,7 +1615,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 230: + e> read(230) -> 230: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1649,7 +1649,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 273 > EOF testing ssh1 creating ssh peer from handshake results @@ -1697,7 +1697,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 273: + e> read(273) -> 273: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1760,7 +1760,7 @@ o> read(1) -> 1: 0 result: 0 remote output: - e> read(-1) -> 273: + e> read(273) -> 273: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1789,7 +1789,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 100 > EOF testing ssh1 creating ssh peer from handshake results @@ -1837,7 +1837,7 @@ o> read(1) -> 1: 1 result: 1 remote output: - e> read(-1) -> 100: + e> read(100) -> 100: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1889,7 +1889,7 @@ o> read(1) -> 1: 1 result: 1 remote output: - e> read(-1) -> 100: + e> read(100) -> 100: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -1919,7 +1919,7 @@ > # This is "force" in hex. > heads 666f726365 > PUSHFILE ../initial.v1.hg - > readavailable + > eread 152 > EOF testing ssh1 creating ssh peer from handshake results @@ -1967,7 +1967,7 @@ o> read(1) -> 1: 1 result: 1 remote output: - e> read(-1) -> 152: + e> read(152) -> 152: e> adding changesets\n e> adding manifests\n e> adding file changes\n @@ -2023,7 +2023,7 @@ o> read(1) -> 1: 1 result: 1 remote output: - e> read(-1) -> 152: + e> read(152) -> 152: e> adding changesets\n e> adding manifests\n e> adding file changes\n diff --git a/tests/test-ssh-proto.t b/tests/test-ssh-proto.t --- a/tests/test-ssh-proto.t +++ b/tests/test-ssh-proto.t @@ -1118,7 +1118,8 @@ > upgrade another-token proto=irrelevant\n > hello\n > readline - > readavailable + > ereadline + > ereadline > EOF using raw connection to peer i> write(153) -> 153: @@ -1138,8 +1139,9 @@ i> hello\n o> readline() -> 1: o> \n - e> read(-1) -> 42: + e> readline() -> 40: e> cannot upgrade protocols multiple times\n + e> readline() -> 2: e> -\n Malformed upgrade request line (not exactly 3 space delimited tokens) @@ -1221,7 +1223,8 @@ > upgrade token proto=exp-ssh-v2-0001\n > invalid\n > readline - > readavailable + > ereadline + > ereadline > EOF using raw connection to peer i> write(44) -> 44: @@ -1229,8 +1232,9 @@ i> invalid\n o> readline() -> 1: o> \n - e> read(-1) -> 46: + e> readline() -> 44: e> malformed handshake protocol: missing hello\n + e> readline() -> 2: e> -\n $ hg debugwireproto --localssh --peer raw << EOF @@ -1239,7 +1243,8 @@ > hello\n > invalid\n > readline - > readavailable + > ereadline + > ereadline > EOF using raw connection to peer i> write(50) -> 50: @@ -1248,8 +1253,9 @@ i> invalid\n o> readline() -> 1: o> \n - e> read(-1) -> 48: + e> readline() -> 46: e> malformed handshake protocol: missing between\n + e> readline() -> 2: e> -\n $ hg debugwireproto --localssh --peer raw << EOF @@ -1259,7 +1265,8 @@ > between\n > invalid\n > readline - > readavailable + > ereadline + > ereadline > EOF using raw connection to peer i> write(58) -> 58: @@ -1269,8 +1276,9 @@ i> invalid\n o> readline() -> 1: o> \n - e> read(-1) -> 49: + e> readline() -> 47: e> malformed handshake protocol: missing pairs 81\n + e> readline() -> 2: e> -\n Legacy commands are not exposed to version 2 of protocol