Mercurial > hg-stable
changeset 42576:ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Differential Revision: https://phab.mercurial-scm.org/D6616
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 08 Jul 2019 14:01:01 -0400 |
parents | eec65b706caf |
children | ceb31d96d3ae |
files | mercurial/scmutil.py tests/test-extdata.t |
diffstat | 2 files changed, 14 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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: