Patchwork D11136: dirstate: use `reset_state` in `update_file_p1`

login
register
mail settings
Submitter phabricator
Date July 19, 2021, 10:41 a.m.
Message ID <differential-rev-PHID-DREV-tvz36r6ftapjjvgpv2jw-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49448/
State Superseded
Headers show

Comments

phabricator - July 19, 2021, 10:41 a.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  Going through the same API is more consistent and allow us to push
  implementation lower down the call stack.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D11136

AFFECTED FILES
  mercurial/dirstate.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -521,22 +521,38 @@ 
             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,