bdd23d10b2
Arguably, this is a bug in Nix's structuredAttrs: without structuredAttrs, exportReferencesGraph with an empty path set would still result in information being provided. With structuredAttrs, no info is provided for an empty path set. Nevertheless, we need to be able to build even if Nix has the bug, so work around it by checking for an empty path set and handling it explicitly.
42 lines
1.1 KiB
Nix
42 lines
1.1 KiB
Nix
# This derivation builds two files containing information about the
|
|
# closure of 'rootPaths': $out/store-paths contains the paths in the
|
|
# closure, and $out/registration contains a file suitable for use with
|
|
# "nix-store --load-db" and "nix-store --register-validity
|
|
# --hash-given".
|
|
|
|
{ stdenv, coreutils, jq }:
|
|
|
|
{ rootPaths }:
|
|
|
|
assert builtins.langVersion >= 5;
|
|
|
|
stdenv.mkDerivation {
|
|
name = "closure-info";
|
|
|
|
__structuredAttrs = true;
|
|
|
|
exportReferencesGraph.closure = rootPaths;
|
|
|
|
preferLocalBuild = true;
|
|
|
|
nativeBuildInputs = [ coreutils jq ];
|
|
|
|
empty = rootPaths == [];
|
|
|
|
buildCommand =
|
|
''
|
|
out=''${outputs[out]}
|
|
|
|
mkdir $out
|
|
|
|
if [[ -n "$empty" ]]; then
|
|
echo 0 > $out/total-nar-size
|
|
touch $out/registration $out/store-paths
|
|
else
|
|
jq -r ".closure | map(.narSize) | add" < "$NIX_ATTRS_JSON_FILE" > $out/total-nar-size
|
|
jq -r '.closure | map([.path, .narHash, .narSize, "", (.references | length)] + .references) | add | map("\(.)\n") | add' < "$NIX_ATTRS_JSON_FILE" | head -n -1 > $out/registration
|
|
jq -r '.closure[].path' < "$NIX_ATTRS_JSON_FILE" > $out/store-paths
|
|
fi
|
|
|
|
'';
|
|
}
|