extdata: avoid crashing inside subprocess when we get a revset parse error
Differential Revision: https://phab.mercurial-scm.org/D6616
--- a/mercurial/scmutil.py Mon Jul 08 13:57:44 2019 -0400
+++ b/mercurial/scmutil.py Mon Jul 08 14:01:01 2019 -0400
@@ -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:
--- a/tests/test-extdata.t Mon Jul 08 13:57:44 2019 -0400
+++ b/tests/test-extdata.t Mon Jul 08 14:01:01 2019 -0400
@@ -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: