# HG changeset patch # User Marcin Kuzminski # Date 2020-01-21 09:07:02 # Node ID 09727ae6e1dd888fb41f833ff9f2d69f53576ff0 # Parent f74233022b9ab1805043ea02dffb1bf72287ba08 maintainance: added hg_rebuild_fn_cache to Mercurial lib. diff --git a/vcsserver/hg.py b/vcsserver/hg.py --- a/vcsserver/hg.py +++ b/vcsserver/hg.py @@ -27,6 +27,7 @@ from hgext.strip import strip as hgext_s from mercurial import commands from mercurial import unionrepo from mercurial import verify +from mercurial import repair import vcsserver from vcsserver import exceptions @@ -151,6 +152,21 @@ class MercurialFactory(RepoFactory): return self._create_repo(wire, create) +def patch_ui_message_output(baseui): + baseui.setconfig('ui', 'quiet', 'false') + output = io.BytesIO() + + def write(data, **unused_kwargs): + output.write(data) + + baseui.status = write + baseui.write = write + baseui.warn = write + baseui.debug = write + + return baseui, output + + class HgRemote(RemoteBase): def __init__(self, factory): @@ -706,12 +722,8 @@ class HgRemote(RemoteBase): def verify(self, wire,): repo = self._factory.repo(wire) baseui = self._factory._create_config(wire['config']) - baseui.setconfig('ui', 'quiet', 'false') - output = io.BytesIO() - def write(data, **unused_kwargs): - output.write(data) - baseui.write = write + baseui, output = patch_ui_message_output(baseui) repo.ui = baseui verify.verify(repo) @@ -721,12 +733,7 @@ class HgRemote(RemoteBase): def hg_update_cache(self, wire,): repo = self._factory.repo(wire) baseui = self._factory._create_config(wire['config']) - baseui.setconfig('ui', 'quiet', 'false') - output = io.BytesIO() - - def write(data, **unused_kwargs): - output.write(data) - baseui.write = write + baseui, output = patch_ui_message_output(baseui) repo.ui = baseui with repo.wlock(), repo.lock(): @@ -735,6 +742,18 @@ class HgRemote(RemoteBase): return output.getvalue() @reraise_safe_exceptions + def hg_rebuild_fn_cache(self, wire,): + repo = self._factory.repo(wire) + baseui = self._factory._create_config(wire['config']) + baseui, output = patch_ui_message_output(baseui) + + repo.ui = baseui + + repair.rebuildfncache(baseui, repo) + + return output.getvalue() + + @reraise_safe_exceptions def tags(self, wire): cache_on, context_uid, repo_id = self._cache_on(wire) @self.region.conditional_cache_on_arguments(condition=cache_on)