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.
This commit is contained in:
Yuya Nishihara 2014-03-03 19:41:23 +09:00
parent b41bd8b777
commit cb7c7a6489
2 changed files with 8 additions and 2 deletions

View File

@ -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)

View File

@ -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)