diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -129,13 +129,7 @@ def make_file(repo, pat, node=None,
 
 def matchpats(repo, pats=[], opts={}, head='', globbed=False):
     cwd = repo.getcwd()
-    if not pats and cwd:
-        opts['include'] = [os.path.join(cwd, i)
-                           for i in opts.get('include', [])]
-        opts['exclude'] = [os.path.join(cwd, x)
-                           for x in opts.get('exclude', [])]
-        cwd = ''
-    return util.cmdmatcher(repo.root, cwd, pats or ['.'], opts.get('include'),
+    return util.cmdmatcher(repo.root, cwd, pats or [], opts.get('include'),
                            opts.get('exclude'), head, globbed=globbed)
 
 def walk(repo, pats=[], opts={}, node=None, head='', badmatch=None,
diff --git a/tests/test-issue352 b/tests/test-issue352
--- a/tests/test-issue352
+++ b/tests/test-issue352
@@ -6,16 +6,17 @@ cd foo
 
 A=`echo -e -n 'he\rllo'`
 
-echo foo > "hell
-o"
 echo foo > "$A"
 hg add
 hg ci -A -m m
 rm "$A"
-ls
+
+echo foo > "hell
+o"
 hg add
-# BUG ? we don't walk on filenames with '\n' (regexp related) ?
-hg debugwalk
 hg ci -A -m m
 
+echo foo > "$A"
+hg debugwalk
+
 exit 0
diff --git a/tests/test-issue352.out b/tests/test-issue352.out
--- a/tests/test-issue352.out
+++ b/tests/test-issue352.out
@@ -2,6 +2,13 @@ adding he
llo
 abort: '\n' and '\r' disallowed in filenames
 adding he
llo
 abort: '\n' and '\r' disallowed in filenames
-hell
+adding hell
+o
+abort: '\n' and '\r' disallowed in filenames
+adding hell
 o
-nothing changed
+abort: '\n' and '\r' disallowed in filenames
+f  he
llo  he
llo
+f  hell
+o  hell
+o