--- a/mercurial/dirstatemap.py Wed Sep 15 11:13:46 2021 +0200
+++ b/mercurial/dirstatemap.py Wed Sep 15 18:05:39 2021 +0200
@@ -307,6 +307,36 @@
self.otherparentset.discard(filename)
self._map[filename] = entry
+ def set_tracked(self, filename):
+ new = False
+ entry = self.get(filename)
+ if entry is None:
+ self._dirs_incr(filename)
+ entry = DirstateItem(
+ p1_tracked=False,
+ p2_tracked=False,
+ wc_tracked=True,
+ merged=False,
+ clean_p1=False,
+ clean_p2=False,
+ possibly_dirty=False,
+ parentfiledata=None,
+ )
+ self._map[filename] = entry
+ if entry.dm_nonnormal:
+ self.nonnormalset.add(filename)
+ new = True
+ elif not entry.tracked:
+ self._dirs_incr(filename, entry)
+ entry.set_tracked()
+ new = True
+ else:
+ # XXX This is probably overkill for more case, but we need this to
+ # fully replace the `normallookup` call with `set_tracked` one.
+ # Consider smoothing this in the future.
+ self.set_possibly_dirty(filename)
+ return new
+
def set_untracked(self, f):
"""Mark a file as no longer tracked in the dirstate map"""
entry = self.get(f)
@@ -663,6 +693,23 @@
else:
assert False, 'unreachable'
+ def set_tracked(self, filename):
+ new = False
+ entry = self.get(filename)
+ if entry is None:
+ self.addfile(filename, added=True)
+ new = True
+ elif not entry.tracked:
+ entry.set_tracked()
+ self._rustmap.set_v1(filename, entry)
+ new = True
+ else:
+ # XXX This is probably overkill for more case, but we need this to
+ # fully replace the `normallookup` call with `set_tracked` one.
+ # Consider smoothing this in the future.
+ self.set_possibly_dirty(filename)
+ return new
+
def set_untracked(self, f):
"""Mark a file as no longer tracked in the dirstate map"""
# in merge is only trigger more logic, so it "fine" to pass it.