walk: refactor walk plan
authorMatt Mackall <mpm@selenic.com>
Sun, 31 May 2009 17:54:18 -0500
changeset 8683 99eb4dcb37ce
parent 8682 cc7da5aae4cd
child 8684 5bb7780b57c7
walk: refactor walk plan - never is gone - reorder tests more cleanly - rename nomatches to exact for clearer semantics
mercurial/dirstate.py
--- a/mercurial/dirstate.py	Sun May 31 17:54:18 2009 -0500
+++ b/mercurial/dirstate.py	Sun May 31 17:54:18 2009 -0500
@@ -460,21 +460,20 @@
         work = []
         wadd = work.append
 
-        if match.anypats():
-            #match.match with patterns
+        if match.anypats(): # match.match or .exact with patterns
             dostep3 = True
-            nomatches = False
-        elif not match.files():
-            #match.always or match.never
-            dostep3 = matchfn('')
-            nomatches = not dostep3
-        else:
-            #match.exact or match.match without pattern
+            exact = False
+        elif matchfn == match.exact: # match.exact without patterns
+            dostep3 = False
+            exact = True
+        elif match.files(): # match.match without patterns
             dostep3 = False
-            nomatches = matchfn == match.exact
+            exact = False
+        else: # match.always
+            dostep3 = True
+            exact = False
 
-        if nomatches:
-            #skip step 2
+        if exact: # skip step 2
             dirignore = util.always
 
         files = set(match.files())
@@ -551,7 +550,7 @@
                         results[nf] = None
 
         # step 3: report unseen items in the dmap hash
-        if dostep3 and not nomatches:
+        if dostep3 and not exact:
             visit = sorted([f for f in dmap if f not in results and matchfn(f)])
             for nf, st in zip(visit, util.statfiles([join(i) for i in visit])):
                 if not st is None and not getkind(st.st_mode) in (regkind, lnkkind):