diff options
author | William A. Kennington III <william@wkennington.com> | 2015-08-29 11:51:15 -0700 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2015-08-29 11:51:26 -0700 |
commit | 3afc3494bb5c5135e270baab14fe2a486878de22 (patch) | |
tree | bba35140b916177ec548ff21665305f42549840f /pkgs/development/go-modules/generic | |
parent | b9e999a595bb4a7477fdc8fd5fcd0bade95ed47d (diff) | |
download | nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar.gz nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar.bz2 nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar.lz nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar.xz nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.tar.zst nixpkgs-3afc3494bb5c5135e270baab14fe2a486878de22.zip |
goPackages: Use parallel instead of forking in bash
Diffstat (limited to 'pkgs/development/go-modules/generic')
-rw-r--r-- | pkgs/development/go-modules/generic/default.nix | 91 |
1 files changed, 37 insertions, 54 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix index f0d3be6487c..7842df6b58f 100644 --- a/pkgs/development/go-modules/generic/default.nix +++ b/pkgs/development/go-modules/generic/default.nix @@ -1,4 +1,4 @@ -{ go, govers, lib }: +{ go, govers, parallel, lib }: { name, buildInputs ? [], nativeBuildInputs ? [], passthru ? {}, preFixup ? "" @@ -41,7 +41,7 @@ go.stdenv.mkDerivation ( (builtins.removeAttrs args [ "goPackageAliases" "disabled" ]) // { name = "go${go.meta.branch}-${name}"; - nativeBuildInputs = [ go ] + nativeBuildInputs = [ go parallel ] ++ (lib.optional (!dontRenameImports) govers) ++ nativeBuildInputs; buildInputs = [ go ] ++ buildInputs; @@ -62,7 +62,7 @@ go.stdenv.mkDerivation ( rmdir extraSrc '') + '' - GOPATH=$NIX_BUILD_TOP/go:$GOPATH + export GOPATH=$NIX_BUILD_TOP/go:$GOPATH runHook postConfigure ''; @@ -80,38 +80,39 @@ go.stdenv.mkDerivation ( runHook renameImports - PIDS=() - if [ -n "$subPackages" ] ; then - for p in $subPackages ; do - go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $goPackagePath/$p & - PIDS+=("$!") - done - else - pushd go/src - while read d; do - { - echo "$d" | grep -q "/_" && continue - [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && continue - local OUT - if ! OUT="$(go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $d 2>&1)"; then - if ! echo "$OUT" | grep -q 'no buildable Go source files'; then - echo "$OUT" >&2 - exit 1 - fi - fi - if [ -n "$OUT" ]; then - echo "$OUT" >&2 - fi - } & - PIDS+=("$!") - done < <(find $goPackagePath -type f -name \*.go -exec dirname {} \; | sort | uniq) - popd - fi - - # Exit on error from the parallel process - for PID in "''${PIDS[@]}"; do - wait $PID || exit 1 - done + buildGoDir() { + local d; local cmd; + cmd="$1" + d="$2" + echo "$d" | grep -q "/_" && return 0 + [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0 + local OUT + if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v $d 2>&1)"; then + if ! echo "$OUT" | grep -q 'no buildable Go source files'; then + echo "$OUT" >&2 + return 1 + fi + fi + if [ -n "$OUT" ]; then + echo "$OUT" >&2 + fi + return 0 + } + + getGoDirs() { + local type; + type="$1" + if [ -n "$subPackages" ]; then + echo "$subPackages" | sed "s,\(^\| \),\1$goPackagePath/,g" + else + pushd go/src >/dev/null + find "$goPackagePath" -type f -name \*$type.go -exec dirname {} \; | sort | uniq + popd >/dev/null + fi + } + + export -f buildGoDir # parallel needs to see the function + getGoDirs "" | parallel -j $NIX_BUILD_CORES buildGoDir install runHook postBuild ''; @@ -119,25 +120,7 @@ go.stdenv.mkDerivation ( checkPhase = args.checkPhase or '' runHook preCheck - PIDS=() - if [ -n "$subPackages" ] ; then - for p in $subPackages ; do - go test -p $NIX_BUILD_CORES -v $goPackagePath/$p & - PIDS+=("$!") - done - else - pushd go/src - while read d; do - go test -p $NIX_BUILD_CORES -v $d & - PIDS+=("$!") - done < <(find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq) - popd - fi - - # Exit on error from the parallel process - for PID in "''${PIDS[@]}"; do - wait $PID || exit 1 - done + getGoDirs test | parallel -j $NIX_BUILD_CORES buildGoDir test runHook postCheck ''; |