setup: update runcmd() to also return the exit status
authorAdam Simpkins <simpkins@fb.com>
Mon, 26 Jun 2017 11:31:30 -0700
changeset 33111 87ee783f7299
parent 33110 6fdc1518983e
child 33112 155d760da7b2
setup: update runcmd() to also return the exit status Update the runcmd() helper function so it also returns the process exit status. This allows callers to more definitively determine if a command failed, rather than testing only for the presence of data on stderr. I don't expect this to have any behavioral changes for now: the commands invoked by setup generally should print data on stderr if and only if they failed.
setup.py
--- a/setup.py	Mon Jun 26 11:31:30 2017 -0700
+++ b/setup.py	Mon Jun 26 11:31:30 2017 -0700
@@ -146,10 +146,10 @@
     p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE, env=env)
     out, err = p.communicate()
-    return out, err
+    return p.returncode, out, err
 
 def runhg(cmd, env):
-    out, err = runcmd(cmd, env)
+    returncode, out, err = runcmd(cmd, env)
     # If root is executing setup.py, but the repository is owned by
     # another user (as in "sudo python setup.py install") we will get
     # trust warnings since the .hg/hgrc file is untrusted. That is
@@ -159,7 +159,7 @@
            if not e.startswith(b'not trusting file') \
               and not e.startswith(b'warning: Not importing') \
               and not e.startswith(b'obsolete feature not enabled')]
-    if err:
+    if err or returncode != 0:
         printf("stderr from '%s':" % (' '.join(cmd)), file=sys.stderr)
         printf(b'\n'.join([b'  ' + e for e in err]), file=sys.stderr)
         return ''
@@ -404,8 +404,8 @@
         # here no extension enabled, disabled() lists up everything
         code = ('import pprint; from mercurial import extensions; '
                 'pprint.pprint(extensions.disabled())')
-        out, err = runcmd([sys.executable, '-c', code], env)
-        if err:
+        returncode, out, err = runcmd([sys.executable, '-c', code], env)
+        if err or returncode != 0:
             raise DistutilsExecError(err)
 
         with open(self._indexfilename, 'w') as f: