stdenv: Avoid some list allocations in check-meta when checking licenses

This commit is contained in:
adisbladis 2023-11-25 11:56:52 +13:00
parent 7d6c3583af
commit 3b13bd5c84

View file

@ -22,11 +22,15 @@ let
optionals
remove
unknownModule
isAttrs
isString
;
inherit (lib.lists)
any
toList
isList
elem
;
# If we're in hydra, we can dispense with the more verbose error
@ -59,11 +63,15 @@ let
hasLicense = attrs:
attrs ? meta.license;
hasAllowlistedLicense = assert areLicenseListsValid; attrs:
hasLicense attrs && any (l: builtins.elem l allowlist) (toList attrs.meta.license);
hasListedLicense = assert areLicenseListsValid; list: attrs:
length list > 0 && hasLicense attrs && (
if isList attrs.meta.license then any (l: elem l list) attrs.meta.license
else elem attrs.meta.license list
);
hasBlocklistedLicense = assert areLicenseListsValid; attrs:
hasLicense attrs && any (l: builtins.elem l blocklist) (toList attrs.meta.license);
hasAllowlistedLicense = attrs: hasListedLicense allowlist attrs;
hasBlocklistedLicense = attrs: hasListedLicense blocklist attrs;
allowBroken = config.allowBroken
|| builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
@ -71,11 +79,16 @@ let
allowUnsupportedSystem = config.allowUnsupportedSystem
|| builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1";
isUnfree = licenses: any (l: !l.free or true) licenses;
isUnfree = licenses:
if isAttrs licenses then !licenses.free or true
# TODO: Returning false in the case of a string is a bug that should be fixed.
# In a previous implementation of this function the function body
# was `licenses: lib.lists.any (l: !l.free or true) licenses;`
# which always evaluates to `!true` for strings.
else if isString licenses then false
else lib.lists.any (l: !l.free or true) licenses;
hasUnfreeLicense = attrs:
hasLicense attrs &&
isUnfree (toList attrs.meta.license);
hasUnfreeLicense = attrs: hasLicense attrs && isUnfree attrs.meta.license;
hasNoMaintainers = attrs:
attrs ? meta.maintainers && (length attrs.meta.maintainers) == 0;