D1341: dirstate: move management of nonnormal sets into dirstate map
mbthomas (Mark Thomas)
phabricator at mercurial-scm.org
Wed Nov 8 17:31:12 UTC 2017
mbthomas created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
The dirstate map owns the nonnormal sets, and so should be the class to update
them. A future implementation of the dirstate will manage these maps
differently.
The action of clearing ambiguous times is now entirely controlled by the
dirstate map, so it moves there too.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D1341
AFFECTED FILES
mercurial/dirstate.py
CHANGE DETAILS
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -415,10 +415,6 @@
self._map.dirs.addpath(f)
self._dirty = True
self._updatedfiles.add(f)
- if state != 'n' or mtime == -1:
- self._map.nonnormalset.add(f)
- if size == -2:
- self._map.otherparentset.add(f)
self._map.addfile(f, state, mode, size, mtime)
def normal(self, f):
@@ -490,7 +486,6 @@
elif entry[0] == 'n' and entry[2] == -2: # other parent
size = -2
self._map.otherparentset.add(f)
- self._map.nonnormalset.add(f)
self._map.removefile(f, size)
if size == 0:
self._map.copymap.pop(f, None)
@@ -506,8 +501,6 @@
if self._map.dropfile(f):
self._dirty = True
self._droppath(f)
- if f in self._map.nonnormalset:
- self._map.nonnormalset.remove(f)
self._map.copymap.pop(f, None)
def _discoverpath(self, path, normed, ignoremissing, exists, storemap):
@@ -631,12 +624,7 @@
# emulate dropping timestamp in 'parsers.pack_dirstate'
now = _getfsnow(self._opener)
- dmap = self._map
- for f in self._updatedfiles:
- e = dmap.get(f)
- if e is not None and e[0] == 'n' and e[3] == now:
- dmap.addfile(f, e[0], e[1], e[2], -1)
- self._map.nonnormalset.add(f)
+ self._map.clearambiguoustimes(self._updatedfiles, now)
# emulate that all 'dirstate.normal' results are written out
self._lastnormaltime = 0
@@ -1256,6 +1244,10 @@
def addfile(self, f, state, mode, size, mtime):
"""Add a tracked file to the dirstate."""
self._map[f] = dirstatetuple(state, mode, size, mtime)
+ if state != 'n' or mtime == -1:
+ self.nonnormalset.add(f)
+ if size == -2:
+ self.otherparentset.add(f)
def removefile(self, f, size):
"""
@@ -1266,6 +1258,7 @@
to be more explicit about what that state is.
"""
self._map[f] = dirstatetuple('r', 0, size, 0)
+ self.nonnormalset.add(f)
def dropfile(self, f):
"""
@@ -1275,8 +1268,16 @@
exists = f in self._map
if exists:
del self._map[f]
+ self.nonnormalset.discard(f)
return exists
+ def clearambiguoustimes(self, files, now):
+ for f in files:
+ e = self.get(f)
+ if e is not None and e[0] == 'n' and e[3] == now:
+ self._map[f] = dirstatetuple(e[0], e[1], e[2], -1)
+ self.nonnormalset.add(f)
+
def nonnormalentries(self):
'''Compute the nonnormal dirstate entries from the dmap'''
try:
To: mbthomas, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list