Mercurial > hg
view tests/test-sshserver.py @ 45239:13814622b3b1
commitctx: extract all the file preparation logic in a new function
Before we actually start to create a new commit we have a large block of logic
that do the necessary file and manifest commit and that determine which files
are been affected by the commit (and how).
This is a complex process on its own. It return a "simple" output that can be
fed to the next step. The output itself is not that simple as we return a lot of
individual items (files, added, removed, ...). My next step (and actual goal for
this cleanup) will be to simplify the return by returning a richer object that
will be more suited for the variation of data we want to store.
After this changeset the `commitctx` is a collection of smaller function with
limited scope. The largest one is still `_filecommit` without about 100 lines of
code.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 23 Jul 2020 23:52:31 +0200 |
parents | 2372284d9457 |
children | 6000f5b25c9b |
line wrap: on
line source
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__)