changeset 48433:080151f18f3a

dirstate: make it mandatory to provide parentfiledata in `set_clean` Gathering the mode, size and mtime, independently from determining that the file is clean is a race-machine. So we just make these information required arguments. (note that the data is still gathered in a racy way in practice, but at least the API is no longer encouraging it.) Differential Revision: https://phab.mercurial-scm.org/D11789
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 17 Nov 2021 20:26:14 +0100
parents 9f1b9e128788
children 6becd5773133
files hgext/git/dirstate.py mercurial/dirstate.py
diffstat 2 files changed, 3 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/git/dirstate.py	Mon Nov 22 15:58:51 2021 +0100
+++ b/hgext/git/dirstate.py	Wed Nov 17 20:26:14 2021 +0100
@@ -257,7 +257,7 @@
             if match(p):
                 yield p
 
-    def set_clean(self, f, parentfiledata=None):
+    def set_clean(self, f, parentfiledata):
         """Mark a file normal and clean."""
         # TODO: for now we just let libgit2 re-stat the file. We can
         # clearly do better.
--- a/mercurial/dirstate.py	Mon Nov 22 15:58:51 2021 +0100
+++ b/mercurial/dirstate.py	Wed Nov 17 20:26:14 2021 +0100
@@ -486,15 +486,12 @@
         return ret
 
     @requires_no_parents_change
-    def set_clean(self, filename, parentfiledata=None):
+    def set_clean(self, filename, parentfiledata):
         """record that the current state of the file on disk is known to be clean"""
         self._dirty = True
-        if parentfiledata:
-            (mode, size, mtime) = parentfiledata
-        else:
-            (mode, size, mtime) = self._get_filedata(filename)
         if not self._map[filename].tracked:
             self._check_new_tracked_filename(filename)
+        (mode, size, mtime) = parentfiledata
         self._map.set_clean(filename, mode, size, mtime)
         if mtime > self._lastnormaltime:
             # Remember the most recent modification timeslot for status(),