overridePythonAttrs: support extension-style newArgs (finalAttrs: previousArgs: { }) (#479258)

This commit is contained in:
Martin Weinelt
2026-04-26 13:47:23 +00:00
committed by GitHub
2 changed files with 40 additions and 2 deletions
@@ -24,10 +24,24 @@ let
let
result = f origArgs;
overrideWith =
# Preserve the plain arguments whenever possible,
# as `overrideStdenvCompat` works more reliably with `args.stdenv`
# than `result.__stdenvPythonCompat`.
# TODO(@ShamrockLee): After `overrideStdenvCompat` is fully deprecated,
# simplify as
# ```nix
# newArgs: lib.extends (lib.toExtension newArgs) origArgs
# ```
if lib.isFunction origArgs then
newArgs: lib.extends (_: lib.toFunction newArgs) origArgs
newArgs: lib.extends (lib.toExtension newArgs) origArgs
else
newArgs: origArgs // lib.toFunction newArgs origArgs;
newArgs:
if !(lib.isFunction newArgs) then
origArgs // newArgs
else if !(lib.isFunction (newArgs origArgs)) then
origArgs // newArgs origArgs
else
finalAttrs: origArgs // newArgs finalAttrs origArgs;
in
if lib.isAttrs result then
result
+24
View File
@@ -434,6 +434,14 @@ let
p.overridePythonAttrs (previousAttrs: {
overridePythonAttrsFlag = previousAttrs.overridePythonAttrsFlag or 0 + 1;
});
applyOverridePythonAttrsFP =
p:
p.overridePythonAttrs (
finalAttrs: previousAttrs: {
overridePythonAttrsFlag = previousAttrs.overridePythonAttrsFlag or 0 + 1;
overridePythonAttrsFlagP1 = finalAttrs.overridePythonAttrsFlag + 1;
}
);
overrideAttrsFooBar =
drv:
drv.overrideAttrs (
@@ -465,6 +473,22 @@ let
expr = (applyOverridePythonAttrs (applyOverridePythonAttrs package-stub)).overridePythonAttrsFlag;
expected = 2;
};
overridePythonAttrs-plain = {
expr = (package-stub.overridePythonAttrs { overridePythonAttrsFlag = 0; }).overridePythonAttrsFlag;
expected = 0;
};
overridePythonAttrs-finalAttrs = {
expr = {
inherit (applyOverridePythonAttrsFP package-stub)
overridePythonAttrsFlag
overridePythonAttrsFlagP1
;
};
expected = {
overridePythonAttrsFlag = 1;
overridePythonAttrsFlagP1 = 2;
};
};
overrideAttrs-overridePythonAttrs-test-overrideAttrs = {
expr = {
inherit (applyOverridePythonAttrs (overrideAttrsFooBar package-stub))