From a4707aed5524e54e54ea41c44607630977364efc Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Wed, 29 Jul 2015 18:16:56 -0700 Subject: go: Run builds in parallel --- pkgs/development/go-modules/generic/default.nix | 43 ++++++++++++++++++------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'pkgs/development/go-modules') 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" -- cgit 1.4.1