[Request] [+- ] D11800: largefile: use the proper "mtime boundary" logic during fixup

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Wed Nov 24 11:16:10 UTC 2021


marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  This will prevent ambiguous cache entry to be used in racy situation. This fix
  flakiness in test and some real live misbehavior.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  hgext/largefiles/lfutil.py
  hgext/largefiles/reposetup.py

CHANGE DETAILS

diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py
--- a/hgext/largefiles/reposetup.py
+++ b/hgext/largefiles/reposetup.py
@@ -228,13 +228,12 @@
                                 s = wctx[lfile].lstat()
                                 mode = s.st_mode
                                 size = s.st_size
-                                mtime = timestamp.mtime_of(s)
-                                cache_data = (mode, size, mtime)
-                                # We should consider using the mtime_boundary
-                                # logic here, but largefile never actually had
-                                # ambiguity protection before, so this confuse
-                                # the tests and need more thinking.
-                                lfdirstate.set_clean(lfile, cache_data)
+                                mtime = timestamp.reliable_mtime_of(
+                                    s, mtime_boundary
+                                )
+                                if mtime is not None:
+                                    cache_data = (mode, size, mtime)
+                                    lfdirstate.set_clean(lfile, cache_data)
                     else:
                         tocheck = unsure + modified + added + clean
                         modified, added, clean = [], [], []
diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py
--- a/hgext/largefiles/lfutil.py
+++ b/hgext/largefiles/lfutil.py
@@ -261,11 +261,10 @@
             st = wctx[lfile].lstat()
             mode = st.st_mode
             size = st.st_size
-            mtime = timestamp.mtime_of(st)
-            cache_data = (mode, size, mtime)
-            # We should consider using the mtime_boundary logic here,
-            # but largefile never actually had ambiguity protection before.
-            lfdirstate.set_clean(lfile, cache_data)
+            mtime = timestamp.reliable_mtime_of(st, mtime_boundary)
+            if mtime is not None:
+                cache_data = (mode, size, mtime)
+                lfdirstate.set_clean(lfile, cache_data)
     return s
 
 



To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20211124/31801dfd/attachment.html>


More information about the Mercurial-patches mailing list