# HG changeset patch # User Yuya Nishihara # Date 1506856910 -3600 # Node ID b1959391a088b95da5998405a85b3ece8c89b6aa # Parent 0fe5d99804bb66b3d066278f5e1c4740f9c695ab extdata: abort if external command exits with non-zero status (BC) Per the last discussion, this is more reliable and consistent way than suppressing an error. For grep, erroring out might be inconvenient, but for curl, non-zero exit status should be detected. The latter wouldn't be possible if non-zero status is ignored. https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-October/105727.html diff -r 0fe5d99804bb -r b1959391a088 mercurial/scmutil.py --- a/mercurial/scmutil.py Thu Dec 14 21:30:00 2017 +0800 +++ b/mercurial/scmutil.py Sun Oct 01 12:21:50 2017 +0100 @@ -1100,12 +1100,11 @@ finally: if proc: proc.communicate() - if proc.returncode != 0: - # not an error so 'cmd | grep' can be empty - repo.ui.debug("extdata command '%s' %s\n" - % (cmd, util.explainexit(proc.returncode)[0])) if src: src.close() + if proc and proc.returncode != 0: + raise error.Abort(_("extdata command '%s' failed: %s") + % (cmd, util.explainexit(proc.returncode)[0])) return data diff -r 0fe5d99804bb -r b1959391a088 tests/test-extdata.t --- a/tests/test-extdata.t Thu Dec 14 21:30:00 2017 +0800 +++ b/tests/test-extdata.t Sun Oct 01 12:21:50 2017 +0100 @@ -46,8 +46,8 @@ test non-zero exit of shell command $ hg log -qr "extdata(emptygrep)" - $ hg log -qr "extdata(emptygrep)" --debug - extdata command 'cat extdata.txt | grep empty' exited with status * (glob) + abort: extdata command 'cat extdata.txt | grep empty' failed: exited with status 1 + [255] test bad extdata() revset source