changeset 48430:991e6f728b50

status: adapt largefile to gather stats at lookup time See the core code for details of why we are doing this. We don't factor the code in a common function yet, because we will have to adapt a bit more things in the largefile case at the end of the series. Differential Revision: https://phab.mercurial-scm.org/D11786
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 18 Nov 2021 22:46:50 +0100
parents 41f40f35278a
children 4237be881bb6
files hgext/largefiles/lfutil.py hgext/largefiles/reposetup.py
diffstat 2 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/largefiles/lfutil.py	Wed Nov 17 23:37:47 2021 +0100
+++ b/hgext/largefiles/lfutil.py	Thu Nov 18 22:46:50 2021 +0100
@@ -32,6 +32,7 @@
     vfs as vfsmod,
 )
 from mercurial.utils import hashutil
+from mercurial.dirstateutils import timestamp
 
 shortname = b'.hglf'
 shortnameslash = shortname + b'/'
@@ -247,6 +248,7 @@
         match, subrepos=[], ignored=False, clean=False, unknown=False
     )
     modified, clean = s.modified, s.clean
+    wctx = repo[None]
     for lfile in unsure:
         try:
             fctx = pctx[standin(lfile)]
@@ -256,7 +258,12 @@
             modified.append(lfile)
         else:
             clean.append(lfile)
-            lfdirstate.set_clean(lfile)
+            st = wctx[lfile].lstat()
+            mode = st.st_mode
+            size = st.st_size
+            mtime = timestamp.mtime_of(st)
+            cache_data = (mode, size, mtime)
+            lfdirstate.set_clean(lfile, cache_data)
     return s
 
 
--- a/hgext/largefiles/reposetup.py	Wed Nov 17 23:37:47 2021 +0100
+++ b/hgext/largefiles/reposetup.py	Thu Nov 18 22:46:50 2021 +0100
@@ -22,6 +22,8 @@
     util,
 )
 
+from mercurial.dirstateutils import timestamp
+
 from . import (
     lfcommands,
     lfutil,
@@ -210,6 +212,7 @@
                         s.clean,
                     )
                     if parentworking:
+                        wctx = repo[None]
                         for lfile in unsure:
                             standin = lfutil.standin(lfile)
                             if standin not in ctx1:
@@ -222,7 +225,12 @@
                             else:
                                 if listclean:
                                     clean.append(lfile)
-                                lfdirstate.set_clean(lfile)
+                                s = wctx[lfile].lstat()
+                                mode = s.st_mode
+                                size = s.st_size
+                                mtime = timestamp.mtime_of(s)
+                                cache_data = (mode, size, mtime)
+                                lfdirstate.set_clean(lfile, cache_data)
                     else:
                         tocheck = unsure + modified + added + clean
                         modified, added, clean = [], [], []