diff mercurial/pathutil.py @ 49892:c7624b1ac8b4

merge: cache the fs checks made during [_checkunknownfiles] this ~halves the number of lstat calls made when updating from rev(-1) to a revision with lots of files
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Wed, 04 Jan 2023 17:14:33 +0000
parents 76d1e9f229fe
children 5f664401dd03
line wrap: on
line diff
--- a/mercurial/pathutil.py	Wed Jan 04 17:03:15 2023 +0000
+++ b/mercurial/pathutil.py	Wed Jan 04 17:14:33 2023 +0000
@@ -56,7 +56,7 @@
 
     def __init__(self, root, callback=None, realfs=True, cached=False):
         self.audited = set()
-        self.auditeddir = set()
+        self.auditeddir = dict()
         self.root = root
         self._realfs = realfs
         self._cached = cached
@@ -118,10 +118,11 @@
             for i in range(len(parts)):
                 prefix = pycompat.ossep.join(parts[: i + 1])
                 if prefix in self.auditeddir:
-                    continue
-                res = self._checkfs_exists(prefix, path)
-                if self._cached:
-                    self.auditeddir.add(prefix)
+                    res = self.auditeddir[prefix]
+                else:
+                    res = self._checkfs_exists(prefix, path)
+                    if self._cached:
+                        self.auditeddir[prefix] = res
                 if not res:
                     break