--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1188,9 +1188,9 @@ def grep(ui, repo, pattern, *pats, **opt
for fn in fns:
if fn in skip:
continue
- fstate.setdefault(fn, {})
try:
grepbody(fn, rev, getfile(fn).read(mf[fn]))
+ fstate.setdefault(fn, [])
if follow:
copied = getfile(fn).renamed(mf[fn])
if copied:
--- a/tests/test-grep
+++ b/tests/test-grep
@@ -52,3 +52,17 @@ echo blue >> color
hg ci -m 3 -d '0 0'
hg grep orange
hg grep --all orange
+
+# Got a traceback when using grep on a single
+# revision with renamed files.
+cd ..
+echo % issue 685
+hg init issue685
+cd issue685
+echo octarine > color
+hg ci -Amcolor
+hg rename color colour
+Hg ci -Am rename
+hg grep octarine
+# Used to crash here
+hg grep -r 1 octarine
--- a/tests/test-grep.out
+++ b/tests/test-grep.out
@@ -32,3 +32,8 @@ color:3:orange
color:3:+:orange
color:2:-:orange
color:1:+:orange
+% issue 685
+adding color
+color:0:octarine
+colour:1:octarine
+colour:1:octarine