D5301: store: append to fncache if there are only new files to write
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Mon Nov 26 23:06:47 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG0728d87a8631: store: append to fncache if there are only new files to write (authored by pulkit, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5301?vs=12595&id=12605
REVISION DETAIL
https://phab.mercurial-scm.org/D5301
AFFECTED FILES
mercurial/store.py
CHANGE DETAILS
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -451,6 +451,8 @@
self.vfs = vfs
self.entries = None
self._dirty = False
+ # set of new additions to fncache
+ self.addls = set()
def _load(self):
'''fill the entries from the fncache file'''
@@ -479,32 +481,45 @@
fp.write(encodedir('\n'.join(self.entries) + '\n'))
fp.close()
self._dirty = False
+ if self.addls:
+ # if we have just new entries, let's append them to the fncache
+ tr.addbackup('fncache')
+ fp = self.vfs('fncache', mode='ab', atomictemp=True)
+ if self.addls:
+ fp.write(encodedir('\n'.join(self.addls) + '\n'))
+ fp.close()
+ self.entries = None
+ self.addls = set()
def add(self, fn):
if self.entries is None:
self._load()
if fn not in self.entries:
- self._dirty = True
- self.entries.add(fn)
+ self.addls.add(fn)
def remove(self, fn):
if self.entries is None:
self._load()
+ if fn in self.addls:
+ self.addls.remove(fn)
+ return
try:
self.entries.remove(fn)
self._dirty = True
except KeyError:
pass
def __contains__(self, fn):
+ if fn in self.addls:
+ return True
if self.entries is None:
self._load()
return fn in self.entries
def __iter__(self):
if self.entries is None:
self._load()
- return iter(self.entries)
+ return iter(self.entries | self.addls)
class _fncachevfs(vfsmod.abstractvfs, vfsmod.proxyvfs):
def __init__(self, vfs, fnc, encode):
@@ -580,6 +595,7 @@
def invalidatecaches(self):
self.fncache.entries = None
+ self.fncache.addls = set()
def markremoved(self, fn):
self.fncache.remove(fn)
To: pulkit, #hg-reviewers
Cc: mjpieters, mercurial-devel
More information about the Mercurial-devel
mailing list