diff options
author | adisbladis <adisbladis@gmail.com> | 2023-11-25 11:56:52 +1300 |
---|---|---|
committer | adisbladis <adisbladis@gmail.com> | 2023-12-12 00:03:20 +1300 |
commit | 3b13bd5c841fc77b92d2c627001414f839d57514 (patch) | |
tree | a91c480855dc4093a3e897c99a3d0033888d2f95 /pkgs | |
parent | 7d6c3583aff6960574001271b0e26dce2d11447a (diff) |
stdenv: Avoid some list allocations in check-meta when checking licenses
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/stdenv/generic/check-meta.nix | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index f2d9233b6fddf..0bcdf69773f8b 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -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; |