Unverified Commit 6aa414bc authored by adisbladis's avatar adisbladis Committed by GitHub
Browse files

Merge pull request #269782 from adisbladis/stdenv-meta-tolist-license-allocations

stdenv: Avoid some list allocations in check-meta when checking licenses
parents dba565f6 3b13bd5c
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -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
    );

  hasAllowlistedLicense = attrs: hasListedLicense allowlist attrs;

  hasBlocklistedLicense = assert areLicenseListsValid; attrs:
    hasLicense attrs && any (l: builtins.elem l blocklist) (toList attrs.meta.license);
  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;