changeset 35412:b1959391a088

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
author Yuya Nishihara <yuya@tcha.org>
date Sun, 01 Oct 2017 12:21:50 +0100
parents 0fe5d99804bb
children c8e8e14a5ee9
files mercurial/scmutil.py tests/test-extdata.t
diffstat 2 files changed, 5 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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