overridePythonAttrs: support extension-style newArgs

Allow overridePythonAttrs to take `finalAttrs: args: { }`.
This commit is contained in:
Yueh-Shun Li
2026-01-09 11:53:23 +08:00
parent d4956bb361
commit e7eb6868d5
2 changed files with 36 additions and 2 deletions

View File

@@ -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

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 (
@@ -469,6 +477,18 @@ let
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))