diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -387,7 +387,10 @@ class dirstate(object): return False return match(file_) - if ignored: imatch = match + ignore = self.ignore + if ignored: + imatch = match + ignore = util.never # self.root may end with a path separator when self.root == '/' common_prefix_len = len(self.root) @@ -420,8 +423,7 @@ class dirstate(object): # don't trip over symlinks st = os.lstat(p) if stat.S_ISDIR(st.st_mode): - ds = util.pconvert(os.path.join(nd, f +'/')) - if imatch(ds): + if not ignore(p): work.append(p) if imatch(np) and np in dc: yield 'm', np, st diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -509,8 +509,7 @@ def _matcher(canonroot, cwd, names, inc, excmatch = matchfn(exckinds, '(?:/|$)') return (roots, - lambda fn: (incmatch(fn) and not excmatch(fn) and - (fn.endswith('/') or patmatch(fn))), + lambda fn: (incmatch(fn) and not excmatch(fn) and patmatch(fn)), (inc or exc or anypats) and True) def system(cmd, environ={}, cwd=None, onerr=None, errprefix=None): diff --git a/tests/test-walk.out b/tests/test-walk.out --- a/tests/test-walk.out +++ b/tests/test-walk.out @@ -73,28 +73,28 @@ f mammals/Procyonidae/raccoon Procy f mammals/skunk skunk hg debugwalk -I *k -m mammals/skunk skunk +f mammals/skunk skunk hg debugwalk -I glob:*k -m mammals/skunk skunk +f mammals/skunk skunk hg debugwalk -I relglob:*k +f beans/black ../beans/black f fenugreek ../fenugreek -m beans/black ../beans/black -m mammals/skunk skunk +f mammals/skunk skunk hg debugwalk -I relglob:*k . f mammals/skunk skunk hg debugwalk -I re:.*k$ +f beans/black ../beans/black f fenugreek ../fenugreek -m beans/black ../beans/black -m mammals/skunk skunk +f mammals/skunk skunk hg debugwalk -I relre:.*k$ +f beans/black ../beans/black f fenugreek ../fenugreek -m beans/black ../beans/black -m mammals/skunk skunk +f mammals/skunk skunk hg debugwalk -I path:beans f beans/black ../beans/black