diff options
author | Linus Heckemann <git@sphalerite.org> | 2023-11-04 09:54:41 +0100 |
---|---|---|
committer | Linus Heckemann <git@sphalerite.org> | 2023-11-04 09:54:41 +0100 |
commit | bdd23d10b25840d8336af1f7958d4cc7d1868098 (patch) | |
tree | 0f7f30e0f1b3437638c5cbf86b1fd5e8b7118cc2 | |
parent | 10d3ba75f063027a0019756d785be9e91a6f0c04 (diff) |
closureInfo: handle empty path set explicitly
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.
-rw-r--r-- | pkgs/build-support/closure-info.nix | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/pkgs/build-support/closure-info.nix b/pkgs/build-support/closure-info.nix index f6c31bd786bb7..f2aa4964d9a1d 100644 --- a/pkgs/build-support/closure-info.nix +++ b/pkgs/build-support/closure-info.nix @@ -21,14 +21,22 @@ stdenv.mkDerivation { nativeBuildInputs = [ coreutils jq ]; + empty = rootPaths == []; + buildCommand = '' out=''${outputs[out]} mkdir $out - 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 + 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 + ''; } |