From 64a6ca1114355caca991817cba83c4beb18136e2 Mon Sep 17 00:00:00 2001 From: Hans Joachim Kliemeck Date: Sat, 20 Sep 2025 22:53:24 +0200 Subject: [PATCH] stdenv: pURL speed optimization --- pkgs/build-support/go/module.nix | 7 ++++++- .../interpreters/python/mk-python-derivation.nix | 7 ++++++- pkgs/development/ruby-modules/gem/default.nix | 6 +++++- pkgs/stdenv/generic/check-meta.nix | 16 ++++++---------- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/pkgs/build-support/go/module.nix b/pkgs/build-support/go/module.nix index 7759fbd4b897..2ed86cb759c7 100644 --- a/pkgs/build-support/go/module.nix +++ b/pkgs/build-support/go/module.nix @@ -424,7 +424,12 @@ lib.extendMkDerivation { meta = { # Add default meta information. platforms = go.meta.platforms or lib.platforms.all; - identifiers.purlParts = finalAttrs.src.meta.identifiers.purlParts or { }; + identifiers = { + ${if (finalAttrs.src.meta.identifiers.purl or null) != null then "purl" else null} = + finalAttrs.src.meta.identifiers.purl; + ${if (finalAttrs.src.meta.identifiers.purls or null) != null then "purls" else null} = + finalAttrs.src.meta.identifiers.purls; + }; } // meta; }; diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index c7ff2f0dce70..c153d2c01fc0 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -416,7 +416,12 @@ let # default to python's platforms platforms = python.meta.platforms; isBuildPythonPackage = python.meta.platforms; - identifiers.purlParts = attrs.src.meta.identifiers.purlParts or { }; + identifiers = { + ${if (attrs.src.meta.identifiers.purl or null) != null then "purl" else null} = + attrs.src.meta.identifiers.purl; + ${if (attrs.src.meta.identifiers.purls or null) != null then "purls" else null} = + attrs.src.meta.identifiers.purls; + }; } // meta; } diff --git a/pkgs/development/ruby-modules/gem/default.nix b/pkgs/development/ruby-modules/gem/default.nix index d8b91063ef51..ec4777d1ee50 100644 --- a/pkgs/development/ruby-modules/gem/default.nix +++ b/pkgs/development/ruby-modules/gem/default.nix @@ -308,7 +308,11 @@ lib.makeOverridable ( }; }) // (lib.optionalAttrs (type == "git") { - identifiers.purlParts = src.meta.identifiers.purlParts or { }; + identifiers = { + ${if (src.meta.identifiers.purl or null) != null then "purl" else null} = src.meta.identifiers.purl; + ${if (src.meta.identifiers.purls or null) != null then "purls" else null} = + src.meta.identifiers.purls; + }; }) // meta; } diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 231867cd04cd..cd690197939b 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -605,12 +605,6 @@ let }) tryCPEPatchVersionInUpdateWithVendor ]; - hasAllPURLParts = - purlParts: - let - values = attrValues purlParts; - in - (length values == 2) && !any isNull values; # The meta attribute is passed in the resulting attribute set, # but it's not part of the actual derivation, i.e., it's not @@ -718,14 +712,16 @@ let ) possibleCPEPartsFuns; purlParts = attrs.meta.identifiers.purlParts or { }; - purl = if hasAllPURLParts purlParts then "pkg:${purlParts.type}/${purlParts.spec}" else null; - purls = optional (purl != null) purl; + purl = + attrs.meta.identifiers.purl or ( + if purlParts ? type && purlParts ? spec then "pkg:${purlParts.type}/${purlParts.spec}" else null + ); + purls = attrs.meta.identifiers.purls or (optional (purl != null) purl); v1 = { inherit cpeParts possibleCPEs - purlParts purls ; ${if cpe != null then "cpe" else null} = cpe; @@ -734,7 +730,7 @@ let in v1 // { - inherit v1; + inherit v1 purlParts; }; # Expose the result of the checks for everyone to see.