mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-21 22:43:01 +00:00
48 lines
1.2 KiB
Nix
48 lines
1.2 KiB
Nix
|
# This file works in tandem with ../../ci/eval/default.nix
|
||
|
# It turns ./release-outpaths.nix into chunks of a fixed size
|
||
|
{
|
||
|
lib ? import ../../lib,
|
||
|
path ? ../..,
|
||
|
# The file containing all available attribute paths, which are split into chunks here
|
||
|
attrpathFile,
|
||
|
chunkSize,
|
||
|
myChunk,
|
||
|
checkMeta,
|
||
|
includeBroken,
|
||
|
systems,
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
attrpaths = lib.importJSON attrpathFile;
|
||
|
myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize attrpaths;
|
||
|
|
||
|
unfiltered = import ./release-outpaths.nix {
|
||
|
inherit path;
|
||
|
inherit checkMeta includeBroken systems;
|
||
|
};
|
||
|
|
||
|
# Turns the unfiltered recursive attribute set into one that is limited to myAttrpaths
|
||
|
filtered =
|
||
|
let
|
||
|
recurse =
|
||
|
index: paths: attrs:
|
||
|
lib.mapAttrs (
|
||
|
name: values:
|
||
|
if attrs ? ${name} then
|
||
|
if lib.any (value: lib.length value <= index + 1) values then
|
||
|
attrs.${name}
|
||
|
else
|
||
|
recurse (index + 1) values attrs.${name}
|
||
|
# Make sure nix-env recurses as well
|
||
|
// {
|
||
|
recurseForDerivations = true;
|
||
|
}
|
||
|
else
|
||
|
null
|
||
|
) (lib.groupBy (a: lib.elemAt a index) paths);
|
||
|
in
|
||
|
recurse 0 myAttrpaths unfiltered;
|
||
|
|
||
|
in
|
||
|
filtered
|