Idan Kamara <idankk86@gmail.com> [Mon, 25 Jul 2011 15:08:37 +0300] rev 14931
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com> [Mon, 25 Jul 2011 15:08:37 +0300] rev 14930
localrepo: decorate dirstate() with filecache
We refresh the stat info when releasing repo.wlock(), right after writing it.
Also, invalidate the dirstate by deleting its attribute. This will force a
stat by the decorator that actually checks if anything changed, rather than
reading it again every time.
Note that prior to this, there was a single dirstate instance created for a
localrepo. It was invalidated by calling dirstate.invalidated(), clearing
its internal attributes.
As a consequence, the following construct is no longer safe:
ds = repo.dirstate # keep a reference to the repo's dirstate
wlock = repo.wlock()
try:
ds.setparents(...)
finally:
wlock.release() # dirstate should be written here
Since it's possible that the dirstate was modified between lines #1 and #2,
therefore changes to the old dirstate won't get written when the lock releases,
because a new instance was created by the decorator.
Idan Kamara <idankk86@gmail.com> [Mon, 25 Jul 2011 15:08:37 +0300] rev 14929
localrepo: add a cache with stat info for files under .hg/