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
--- 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 = [], [], []