Mercurial > public > mercurial-scm > hg
diff mercurial/dirstatemap.py @ 47990:0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
This move more implementation details withing the DirstateItem itself, which is
what we have been doing for a while.
Differential Revision: https://phab.mercurial-scm.org/D11430
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 15 Sep 2021 18:05:39 +0200 |
parents | ffde999a3ea9 |
children | aa442fde0ea5 |
line wrap: on
line diff
--- 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.