whatsupnix: init

Import from https://github.com/NixOS/nix/issues/443#issuecomment-296752535
This commit is contained in:
tv 2017-05-16 23:30:09 +02:00
parent 66f9170f52
commit 015649b9b3
2 changed files with 59 additions and 0 deletions

View File

@ -0,0 +1,15 @@
{ bash, coreutils, gawk, nix, makeWrapper, stdenv }:
stdenv.mkDerivation {
name = "whatsupnix";
phases = [ "installPhase" ];
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
mkdir -p $out/bin
cat - ${./whatsupnix.bash} > $out/bin/whatsupnix <<\EOF
#! ${bash}/bin/bash
export PATH=${stdenv.lib.makeBinPath [ coreutils gawk nix ]}
EOF
chmod +x $out/bin/whatsupnix
'';
}

View File

@ -0,0 +1,44 @@
#!/usr/bin/env bash
# Prints build logs for failed derivations in quiet build mode (-Q).
# See https://github.com/NixOS/nix/issues/443
#
# Usage:
#
# set -o pipefail
# nix-build ... -Q ... | whatsupnix
#
GAWK=${GAWK:-gawk}
NIX_STORE=${NIX_STORE:-nix-store}
broken=$(mktemp)
trap 'rm -f -- "$broken"' EXIT
exec >&2
$GAWK -v broken="$broken" -f <(cat - <<- 'AWK'
match($0, /builder for .*(\/nix\/store\/.+\.drv).* failed/, m) {
print m[1] >> broken
}
{ print $0 }
AWK
)
export NIX_PAGER='' # for nix-store
while read -r drv; do
title="** FAILED $drv LOG **"
frame=${title//?/*}
echo "$frame"
echo "$title"
echo "$frame"
echo
$NIX_STORE -l "$drv"
echo
done < "$broken"
exit 0