mercurial/hg.py
changeset 820 89985a1b3427
parent 814 0902ffece4b4
child 821 72d9bd4841f3
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -446,11 +446,12 @@ class dirstate:
                 if os.path.isdir(f):
                     for dir, subdirs, fl in os.walk(f):
                         d = dir[len(self.root) + 1:]
-                        if d == '.hg':
+                        nd = os.path.normpath(d)
+                        if nd == '.hg':
                             subdirs[:] = []
                             continue
                         for sd in subdirs:
-                            ds = os.path.join(d, sd +'/')
+                            ds = os.path.join(nd, sd +'/')
                             if self.ignore(ds) or not match(ds):
                                 subdirs.remove(sd)
                         for fn in fl:
@@ -466,6 +467,7 @@ class dirstate:
         # not in .hgignore
 
         for src, fn in util.unique(traverse()):
+            fn = os.path.normpath(fn)
             if fn in dc:
                 del dc[fn]
             elif self.ignore(fn):
@@ -868,7 +870,7 @@ class localrepository:
     def walk(self, node = None, files = [], match = util.always):
         if node:
             for fn in self.manifest.read(self.changelog.read(node)[0]):
-                yield 'm', fn
+                if match(fn): yield 'm', fn
         else:
             for src, fn in self.dirstate.walk(files, match):
                 yield src, fn