diff -r 21e1ece30f8c -r 36872036169b mercurial/match.py --- a/mercurial/match.py Mon Apr 06 14:36:08 2015 -0700 +++ b/mercurial/match.py Mon Apr 06 10:51:53 2015 -0700 @@ -9,6 +9,8 @@ import util, pathutil from i18n import _ +propertycache = util.propertycache + def _rematcher(regex): '''compile the regexp with the best available regexp engine and return a matcher function''' @@ -157,6 +159,20 @@ else: optimal roots''' return self._files + @propertycache + def _dirs(self): + return set(util.dirs(self._fmap)) | set(['.']) + + def visitdir(self, dir): + '''Helps while traversing a directory tree. Returns the string 'all' if + the given directory and all subdirectories should be visited. Otherwise + returns True or False indicating whether the given directory should be + visited. If 'all' is returned, calling this method on a subdirectory + gives an undefined result.''' + if not self._fmap or self.exact(dir): + return 'all' + return dir in self._dirs + def exact(self, f): '''Returns True if f is in .files().''' return f in self._fmap