From patchwork Mon Mar 3 12:50:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1, of, 3] localrepo: add hook point to invalidate everything on each command-server run From: Yuya Nishihara X-Patchwork-Id: 3833 Message-Id: To: mercurial-devel@selenic.com Date: Mon, 03 Mar 2014 21:50:40 +0900 # HG changeset patch # User Yuya Nishihara # Date 1393843283 -32400 # Mon Mar 03 19:41:23 2014 +0900 # Node ID ca6451d4deaad5f657763df45dd9619f45a157eb # Parent e9b1daa0dd45da91343b1466792b875d24543e09 localrepo: add hook point to invalidate everything on each command-server run MQ extension will wrap this function to invalidate its state. repo.invalidate cannot be wrapped for this purpose because qpush obtains repo.lock in the middle of the operation, triggering repo.invalidate. Also, it seems wrong to obtain lock earlier because mq data is non-store parts. diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py --- a/mercurial/commandserver.py +++ b/mercurial/commandserver.py @@ -188,8 +188,7 @@ class server(object): repoui = self.repoui.__class__(self.repoui) repoui.copy = copiedui.copy # redo copy protection self.repo.ui = self.repo.dirstate._ui = repoui - self.repo.invalidate() - self.repo.invalidatedirstate() + self.repo.invalidateall() req = dispatch.request(args[:], copiedui, self.repo, self.cin, self.cout, self.cerr) diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -993,6 +993,13 @@ class localrepository(object): pass self.invalidatecaches() + def invalidateall(self): + '''Fully invalidates both store and non-store parts, causing the + subsequent operation to reread any outside changes.''' + # extension should hook this to invalidate its caches + self.invalidate() + self.invalidatedirstate() + def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc): try: l = lockmod.lock(vfs, lockname, 0, releasefn, desc=desc)