diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -1541,7 +1541,12 @@ pass # we ignore data for nodes that don't exist locally finally: if proc: - proc.communicate() + try: + proc.communicate() + except ValueError: + # This happens if we started iterating src and then + # get a parse error on a line. It should be safe to ignore. + pass if src: src.close() if proc and proc.returncode != 0: diff --git a/tests/test-extdata.t b/tests/test-extdata.t --- a/tests/test-extdata.t +++ b/tests/test-extdata.t @@ -66,9 +66,14 @@ > 9de260b1e88e > EOF -BUG: this should print the revset parse error - $ hg log -qr "extdata(badparse)" 2>&1 | grep ValueError - ValueError: Mixing iteration and read methods would lose data +It might be nice if this error message mentioned where the bad string +came from (eg line X of extdata source S), but the important thing is +that we don't crash before we can print the parse error. + $ hg log -qr "extdata(badparse)" + hg: parse error at 0: not a prefix: + + (+---------------------------------------+ + ^ here) + [255] test template support: