# HG changeset patch
# User Yuya Nishihara <y...@tcha.org>
# Date 1506856910 -3600
#      Sun Oct 01 12:21:50 2017 +0100
# Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
# Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
extdata: abort if external command exits with non-zero status

It could be a warning, but a warning in template output would be unreadable.

diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1039,7 +1039,7 @@ def extdatasource(repo, source):
         raise error.Abort(_("unknown extdata source '%s'") % source)
 
     data = {}
-    src = proc = None
+    src = proc = err = None
     try:
         if spec.startswith("shell:"):
             # external commands should be run relative to the repo root
@@ -1065,8 +1065,13 @@ def extdatasource(repo, source):
     finally:
         if proc:
             proc.communicate()
+            if proc.returncode != 0:
+                err = (_("extdata command '%s' failed: %s")
+                       % (cmd, util.explainexit(proc.returncode)[0]))
         if src:
             src.close()
+    if err:
+        raise error.Abort(err)
 
     return data
 
diff --git a/tests/test-extdata.t b/tests/test-extdata.t
--- a/tests/test-extdata.t
+++ b/tests/test-extdata.t
@@ -12,6 +12,7 @@ test revset support
   > filedata = file:extdata.txt
   > notes = notes.txt
   > shelldata = shell:cat extdata.txt | grep 2
+  > fail = shell:false
   > EOF
   $ cat <<'EOF' > extdata.txt
   > 2 another comment on 2
@@ -50,6 +51,9 @@ test bad extdata() revset source
   $ hg log -qr "extdata(unknown)"
   abort: unknown extdata source 'unknown'
   [255]
+  $ hg log -qr "extdata(fail)"
+  abort: extdata command 'false' failed: exited with status 1
+  [255]
 
 test template support:
 
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to