diff options
author | William A. Kennington III <william@wkennington.com> | 2015-07-29 18:16:56 -0700 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2015-07-29 18:16:56 -0700 |
commit | a4707aed5524e54e54ea41c44607630977364efc (patch) | |
tree | cbe66ba52698bd9c5747324817d0dc9a3186abdf | |
parent | c6bb486641a0784b0230fc6e076df2cd40f6e3e1 (diff) | |
download | nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.gz nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.bz2 nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.lz nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.xz nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.zst nixlib-a4707aed5524e54e54ea41c44607630977364efc.zip |
go: Run builds in parallel
-rw-r--r-- | pkgs/development/go-modules/generic/default.nix | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix index d7b4b1f3b4c1..72b6ad7fdf94 100644 --- a/pkgs/development/go-modules/generic/default.nix +++ b/pkgs/development/go-modules/generic/default.nix @@ -66,13 +66,16 @@ 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 + go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $goPackagePath/$p & + PIDS+=("$!") done else - (cd go/src - find $goPackagePath -type f -name \*.go -exec dirname {} \; | sort | uniq | while read d; do + pushd go/src + while read d; do + { echo "$d" | grep -q "/_" && continue [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && continue local OUT @@ -85,26 +88,43 @@ go.stdenv.mkDerivation ( if [ -n "$OUT" ]; then echo "$OUT" >&2 fi - done) + } & + 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 + runHook postBuild ''; 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 + go test -p $NIX_BUILD_CORES -v $goPackagePath/$p & done + PIDS+=("$!") else - (cd go/src - find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq | while read d; do + pushd go/src + while read d; do go test -p $NIX_BUILD_CORES -v $d - done) + done < <(find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq) + popd + PIDS+=("$!") fi + # Exit on error from the parallel process + for PID in "''${PIDS[@]}"; do + wait $PID || exit 1 + done + runHook postCheck ''; @@ -114,12 +134,13 @@ go.stdenv.mkDerivation ( mkdir -p $out if [ -z "$dontInstallSrc" ]; then - (cd "$NIX_BUILD_TOP/go" - find . -type f | while read f; do + pushd "$NIX_BUILD_TOP/go" + while read f; do echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue mkdir -p "$(dirname "$out/share/go/$f")" cp $NIX_BUILD_TOP/go/$f $out/share/go/$f - done) + done < <(find . -type f) + popd fi dir="$NIX_BUILD_TOP/go/bin" |