changelog: move branchinfo to changelogrevision
The function parses the extra dictionary after looking up the
changelogrevision. To avoid duplicated look up, it is better to provide
it as property of changelogrevision instead. Keep the function for a
release cycle as at least the topic extension depends on it.
Differential Revision: https://phab.mercurial-scm.org/D9779
from __future__ import absolute_import, print_function
import io
import unittest
import silenttestrunner
from mercurial import (
wireprotoserver,
wireprotov1server,
)
from mercurial.utils import procutil
class SSHServerGetArgsTests(unittest.TestCase):
def testparseknown(self):
tests = [
(b'* 0\nnodes 0\n', [b'', {}]),
(
b'* 0\nnodes 40\n1111111111111111111111111111111111111111\n',
[b'1111111111111111111111111111111111111111', {}],
),
]
for input, expected in tests:
self.assertparse(b'known', input, expected)
def assertparse(self, cmd, input, expected):
server = mockserver(input)
proto = wireprotoserver.sshv1protocolhandler(
server._ui, server._fin, server._fout
)
_func, spec = wireprotov1server.commands[cmd]
self.assertEqual(proto.getargs(spec), expected)
def mockserver(inbytes):
ui = mockui(inbytes)
repo = mockrepo(ui)
return wireprotoserver.sshserver(ui, repo)
class mockrepo(object):
def __init__(self, ui):
self.ui = ui
class mockui(object):
def __init__(self, inbytes):
self.fin = io.BytesIO(inbytes)
self.fout = io.BytesIO()
self.ferr = io.BytesIO()
def protectfinout(self):
return self.fin, self.fout
def restorefinout(self, fin, fout):
pass
if __name__ == '__main__':
# Don't call into msvcrt to set BytesIO to binary mode
procutil.setbinary = lambda fp: True
silenttestrunner.main(__name__)