[PATCH 1 of 2] dirstate: add an extension hook for interesting files

Siddharth Agarwal sid0 at fb.com
Fri May 10 01:17:42 CDT 2013

# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1366675878 25200
#      Mon Apr 22 17:11:18 2013 -0700
# Node ID ed4040d92e56cd7a963f896f72bcf55922449171
# Parent  0a031b2198905fed27a2c5adbda215c7907d3cea
dirstate: add an extension hook for interesting files

Consider a hypothetical extension that implements walk in a more efficient
manner and return only files that status would consider interesting. However,
that can only be done under some situations, such as when clean files are
not being asked for and a match.traversedir callback is not set. The
interesting flag lets walk tell these two cases apart.

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -623,14 +623,23 @@
         return results, dirsfound, dirsnotfound
-    def walk(self, match, subrepos, unknown, ignored):
+    def walk(self, match, subrepos, unknown, ignored, interesting=False):
         Walk recursively through the directory tree, finding all files
         matched by match.
+        If interesting is True, only return a conservative estimate of files
+        that are somehow interesting. This should include every file that is
+        modified, added, removed, deleted, unknown or ignored (the last two if
+        requested), plus maybe some clean files.
         Return a dict mapping filename to stat-like object (either
         mercurial.osutil.stat instance or return value of os.stat()).
+        # interesting is an extension hook -- this implementation doesn't use it
+        # at all. This satisfies the contract because interesting is
+        # conservative.
         def fwarn(f, msg):
             self._ui.warn('%s: %s\n' % (self.pathto(f), msg))

More information about the Mercurial-devel mailing list