# HG changeset patch # User Durham Goode # Date 2014-03-24 22:35:07 # Node ID 2efdd186925d64b2c869c07ea27804a1c549ae20 # Parent cd443c7589cca16a7fbcb3a7526ac10bd773dbda caches: invalidate store caches when lock is taken The fncache was not being properly invalidated each time the lock was taken, so in theory it could contain old data from prior to the caller having the lock. This changes it to be invalidated as soon as the lock is taken (same as all our other caches). diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -996,6 +996,7 @@ class localrepository(object): except AttributeError: pass self.invalidatecaches() + self.store.invalidatecaches() def invalidateall(self): '''Fully invalidates both store and non-store parts, causing the diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -340,6 +340,9 @@ class basicstore(object): def write(self, tr): pass + def invalidatecaches(self): + pass + def __contains__(self, path): '''Checks if the store contains path''' path = "/".join(("data", path)) @@ -489,6 +492,9 @@ class fncachestore(basicstore): def write(self, tr): self.fncache.write(tr) + def invalidatecaches(self): + self.fncache.entries = None + def _exists(self, f): ef = self.encode(f) try: