# HG changeset patch # User Pierre-Yves David # Date 2021-07-15 02:55:57 # Node ID 1c06ef8f5ea504fa087ce2380515cc3db2b09e7c # Parent 46c318b9b9a4e8fb41617fc280b9e9f55d80ff59 dirstate: use `reset_state` in `update_file_p1` Going through the same API is more consistent and allow us to push implementation lower down the call stack. Differential Revision: https://phab.mercurial-scm.org/D11136 diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -521,22 +521,38 @@ class dirstate(object): wc_tracked = False else: wc_tracked = entry.tracked + possibly_dirty = False if p1_tracked and wc_tracked: # the underlying reference might have changed, we will have to # check it. - self.normallookup(filename) + possibly_dirty = True elif not (p1_tracked or wc_tracked): # the file is no longer relevant to anyone self._drop(filename) elif (not p1_tracked) and wc_tracked: - if not entry.added: - self._add(filename) + if entry is not None and entry.added: + return # avoid dropping copy information (maybe?) elif p1_tracked and not wc_tracked: - if entry is None or not entry.removed: - self._remove(filename) + pass else: assert False, 'unreachable' + # this mean we are doing call for file we do not really care about the + # data (eg: added or removed), however this should be a minor overhead + # compared to the overall update process calling this. + parentfiledata = None + if wc_tracked: + parentfiledata = self._get_filedata(filename) + + self._updatedfiles.add(filename) + self._map.reset_state( + filename, + wc_tracked, + p1_tracked, + possibly_dirty=possibly_dirty, + parentfiledata=parentfiledata, + ) + @requires_parents_change def update_file( self,