Mercurial > hg
changeset 40577:157f0e29eaa3
remotefilelog: avoid accessing repo instance after dispatch
Upstream commit c5e6c1ba1c79 (hg: don't reuse repo instance after
unshare(), 2018-09-12) poisoned the repo instance after
unshare(). That made `hg unshare` fail with remotefilelog because we
tried to close the fileserverclient after dispatch by accessing it via
the repo. This patch fixes that by storing the reference to the
fileserverclient at the beginning of dispatch.
An analogous patch was sent for remotefilelog version in FB's
hg-experimental as D5246.
Differential Revision: https://phab.mercurial-scm.org/D5253
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 09 Nov 2018 10:47:24 -0800 |
parents | 85bf93def065 |
children | db61a18148a4 |
files | hgext/remotefilelog/__init__.py tests/test-remotefilelog-share.t |
diffstat | 2 files changed, 9 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/remotefilelog/__init__.py Fri Nov 09 11:28:05 2018 -0800 +++ b/hgext/remotefilelog/__init__.py Fri Nov 09 10:47:24 2018 -0800 @@ -542,14 +542,17 @@ # close cache miss server connection after the command has finished def runcommand(orig, lui, repo, *args, **kwargs): + fileservice = None + # repo can be None when running in chg: + # - at startup, reposetup was called because serve is not norepo + # - a norepo command like "help" is called + if repo and isenabled(repo): + fileservice = repo.fileservice try: return orig(lui, repo, *args, **kwargs) finally: - # repo can be None when running in chg: - # - at startup, reposetup was called because serve is not norepo - # - a norepo command like "help" is called - if repo and isenabled(repo): - repo.fileservice.close() + if fileservice: + fileservice.close() extensions.wrapfunction(dispatch, 'runcommand', runcommand) # disappointing hacks below