summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2015-06-13 17:52:00 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2015-06-13 17:52:00 -0700
commitcfb883646f91165c9d839c819519e0c6cea31f47 (patch)
treeb8982475babae3fc7481bd5a3a04e9fab6f33335 /lib
parent0b5ca2535885812d110b7868ea6ef18a47ca7c5f (diff)
downloadspack-cfb883646f91165c9d839c819519e0c6cea31f47.tar.gz
spack-cfb883646f91165c9d839c819519e0c6cea31f47.tar.bz2
spack-cfb883646f91165c9d839c819519e0c6cea31f47.tar.xz
spack-cfb883646f91165c9d839c819519e0c6cea31f47.zip
Fix for `git pull --tags` when using git 1.7.1
- Added `ignore_errors` option to `Executable.__call__` - Can avoid raising errors on *specific* error return values.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/fetch_strategy.py5
-rw-r--r--lib/spack/spack/util/executable.py8
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index 3e6f59d9b8..0ba0251caa 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -437,7 +437,10 @@ class GitFetchStrategy(VCSFetchStrategy):
# cloning. Later git versions can do this with clone
# --branch, but older ones fail.
if self.tag and self.git_version < ver('1.8.5.2'):
- self.git('pull', '--tags')
+ # pull --tags returns a "special" error code of 1 in
+ # older versions that we have to ignore.
+ # see: https://github.com/git/git/commit/19d122b
+ self.git('pull', '--tags', ignore_errors=1)
self.git('checkout', self.tag)
diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py
index 1dcda0d87f..67e8cddd98 100644
--- a/lib/spack/spack/util/executable.py
+++ b/lib/spack/spack/util/executable.py
@@ -57,8 +57,13 @@ class Executable(object):
"""Run the executable with subprocess.check_output, return output."""
return_output = kwargs.get("return_output", False)
fail_on_error = kwargs.get("fail_on_error", True)
+ ignore_errors = kwargs.get("ignore_errors", ())
error = kwargs.get("error", sys.stderr)
+ # if they just want to ignore one error code, make it a tuple.
+ if isinstance(ignore_errors, int):
+ ignore_errors = (ignore_errors,)
+
quoted_args = [arg for arg in args if re.search(r'^"|^\'|"$|\'$', arg)]
if quoted_args:
tty.warn("Quotes in command arguments can confuse scripts like configure.",
@@ -85,7 +90,8 @@ class Executable(object):
out, err = proc.communicate()
self.returncode = proc.returncode
- if fail_on_error and proc.returncode != 0:
+ rc = proc.returncode
+ if fail_on_error and rc != 0 and (rc not in ignore_errors):
raise ProcessError("Command exited with status %d:"
% proc.returncode, cmd_line)
if return_output: