diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -356,10 +356,12 @@ def _matcher(canonroot, cwd, names, inc, filematch = matchfn(files, '(?:/|$)') or always incmatch = always if inc: - incmatch = matchfn(map(patkind, inc), '(?:/|$)') + inckinds = [patkind(canonpath(canonroot, cwd, i)) for i in inc] + incmatch = matchfn(inckinds, '(?:/|$)') excmatch = lambda fn: False if exc: - excmatch = matchfn(map(patkind, exc), '(?:/|$)') + exckinds = [patkind(canonpath(canonroot, cwd, x)) for x in exc] + excmatch = matchfn(exckinds, '(?:/|$)') return (roots, lambda fn: (incmatch(fn) and not excmatch(fn) and diff --git a/tests/test-locate b/tests/test-locate --- a/tests/test-locate +++ b/tests/test-locate @@ -5,6 +5,8 @@ cd t hg init echo 0 > a echo 0 > b +mkdir t +echo 0 > t/x hg ci -A -m m -d "1000000 0" touch nottracked hg locate a @@ -18,3 +20,7 @@ hg locate hg locate -r 0 a hg locate -r 0 NONEXISTENT hg locate -r 0 +echo % -I/-X with relative path should work +cd t +hg locate +hg locate -I ../t diff --git a/tests/test-locate.out b/tests/test-locate.out --- a/tests/test-locate.out +++ b/tests/test-locate.out @@ -1,13 +1,21 @@ adding a adding b +adding t/x a NONEXISTENT: No such file or directory a b +t/x a: No such file or directory NONEXISTENT: No such file or directory b +t/x a -NONEXISTENT: No such file in rev 14467d15ef43 +NONEXISTENT: No such file in rev 9449ae447738 a +t/x b +% -I/-X with relative path should work +b +t/x +t/x