summaryrefslogtreecommitdiffstats
path: root/pkgs/build-support/fetchgit/nix-prefetch-git
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2019-06-18 11:20:28 -0400
committerGitHub <noreply@github.com>2019-06-18 11:20:28 -0400
commitc08cdfa781d6604a00f1fce16587773016d6f307 (patch)
treec96b49474dae62e9470cd41fdf9447fc46d5d314 /pkgs/build-support/fetchgit/nix-prefetch-git
parent426e10558d05c708bdb7c356ff52aae3ec38ca88 (diff)
parent597d6d2bcdc15ce330f88459d23fb3cab206a147 (diff)
Merge pull request #54543 from thefloweringash/git-prefetch-errors
nix-prefetch-git: propagate errors under --quiet
Diffstat (limited to 'pkgs/build-support/fetchgit/nix-prefetch-git')
-rwxr-xr-xpkgs/build-support/fetchgit/nix-prefetch-git47
1 files changed, 32 insertions, 15 deletions
diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git
index c681be8e4c35..b447911ab8d3 100755
--- a/pkgs/build-support/fetchgit/nix-prefetch-git
+++ b/pkgs/build-support/fetchgit/nix-prefetch-git
@@ -270,7 +270,7 @@ make_deterministic_repo(){
}
-_clone_user_rev() {
+clone_user_rev() {
local dir="$1"
local url="$2"
local rev="${3:-HEAD}"
@@ -307,19 +307,29 @@ _clone_user_rev() {
fi
}
-clone_user_rev() {
- if ! test -n "$QUIET"; then
- _clone_user_rev "$@"
- else
- errfile="$(mktemp "${TMPDIR:-/tmp}/git-checkout-err-XXXXXXXX")"
- # shellcheck disable=SC2064
- trap "rm -rf \"$errfile\"" EXIT
- _clone_user_rev "$@" 2> "$errfile" || (
- status="$?"
- cat "$errfile" >&2
- exit "$status"
- )
+exit_handlers=()
+
+run_exit_handlers() {
+ exit_status=$?
+ for handler in "${exit_handlers[@]}"; do
+ eval "$handler $exit_status"
+ done
+}
+
+trap run_exit_handlers EXIT
+
+quiet_exit_handler() {
+ exec 2>&3 3>&-
+ if [ $1 -ne 0 ]; then
+ cat "$errfile" >&2
fi
+ rm -f "$errfile"
+}
+
+quiet_mode() {
+ errfile="$(mktemp "${TMPDIR:-/tmp}/git-checkout-err-XXXXXXXX")"
+ exit_handlers+=(quiet_exit_handler)
+ exec 3>&2 2>"$errfile"
}
json_escape() {
@@ -362,6 +372,14 @@ EOF
fi
}
+remove_tmpPath() {
+ rm -rf "$tmpPath"
+}
+
+if test -n "$QUIET"; then
+ quiet_mode
+fi
+
if test -z "$branchName"; then
branchName=fetchgit
fi
@@ -390,8 +408,7 @@ else
if test -z "$finalPath"; then
tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/git-checkout-tmp-XXXXXXXX")"
- # shellcheck disable=SC2064
- trap "rm -rf \"$tmpPath\"" EXIT
+ exit_handlers+=(remove_tmpPath)
tmpFile="$tmpPath/$(url_to_name "$url" "$rev")"
mkdir -p "$tmpFile"