D6616: extdata: avoid crashing inside subprocess when we get a revset parse error
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Mon Jul 8 18:05:29 EDT 2019
Closed by commit rHGea6558db1011: extdata: avoid crashing inside subprocess when we get a revset parse error (authored by durin42).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6616?vs=15800&id=15825
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D6616/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D6616
AFFECTED FILES
mercurial/scmutil.py
tests/test-extdata.t
CHANGE DETAILS
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:
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:
To: durin42, #hg-reviewers, pulkit
Cc: mjpieters, mercurial-devel
More information about the Mercurial-devel
mailing list