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
--- 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(),