changeset 50676:6b522a9e7451

store: have the revlog determine which files are volatile itself This is a first step toward simplifying the walk step.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 30 May 2023 16:33:28 +0100
parents 60f9602b413e
children cdb471c8ebcf
files mercurial/store.py
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/store.py	Wed Mar 08 14:23:43 2023 +0100
+++ b/mercurial/store.py	Tue May 30 16:33:28 2023 +0100
@@ -608,7 +608,14 @@
             for ext in sorted(self._details, key=_ext_key):
                 path = self._path_prefix + ext
                 data = self._details[ext]
-                self._files.append(StoreFile(unencoded_path=path, **data))
+                # files that are "volatile" and might change between
+                # listing and streaming
+                #
+                # note: the ".nd" file are nodemap data and won't "change"
+                # but they might be deleted.
+                volatile = ext.endswith(REVLOG_FILES_VOLATILE_EXT)
+                f = StoreFile(unencoded_path=path, is_volatile=volatile, **data)
+                self._files.append(f)
         return self._files
 
     def get_streams(
@@ -796,7 +803,6 @@
                     revlog_target_id += b'/'
                 for ext, (t, s) in sorted(details.items()):
                     file_details[ext] = {
-                        'is_volatile': bool(t & FILEFLAGS_VOLATILE),
                         'file_size': s,
                     }
                 yield RevlogStoreEntry(
@@ -852,7 +858,6 @@
                 file_details = {}
                 for ext, (t, s) in details.items():
                     file_details[ext] = {
-                        'is_volatile': bool(t & FILEFLAGS_VOLATILE),
                         'file_size': s,
                     }
                 yield RevlogStoreEntry(
@@ -1155,9 +1160,7 @@
                 # unreachable
                 assert False, revlog
             for ext, t in details.items():
-                file_details[ext] = {
-                    'is_volatile': bool(t & FILEFLAGS_VOLATILE),
-                }
+                file_details[ext] = {}
             entry = RevlogStoreEntry(
                 path_prefix=revlog,
                 revlog_type=rl_type,