diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2019-06-18 11:20:28 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-18 11:20:28 -0400 |
commit | c08cdfa781d6604a00f1fce16587773016d6f307 (patch) | |
tree | c96b49474dae62e9470cd41fdf9447fc46d5d314 | |
parent | 426e10558d05c708bdb7c356ff52aae3ec38ca88 (diff) | |
parent | 597d6d2bcdc15ce330f88459d23fb3cab206a147 (diff) |
Merge pull request #54543 from thefloweringash/git-prefetch-errors
nix-prefetch-git: propagate errors under --quiet
-rwxr-xr-x | pkgs/build-support/fetchgit/nix-prefetch-git | 47 |
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" |