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
--- 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
--- 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