lib/makeOverridable: Abstract result overriding
This commit is contained in:
parent
a75080f58c
commit
e140d709c4
@ -71,13 +71,14 @@ rec {
|
|||||||
|
|
||||||
# Re-call the function but with different arguments
|
# Re-call the function but with different arguments
|
||||||
overrideArgs = newArgs: makeOverridable f (overrideWith newArgs);
|
overrideArgs = newArgs: makeOverridable f (overrideWith newArgs);
|
||||||
|
# Change the result of the function call by applying g to it
|
||||||
|
overrideResult = g: makeOverridable (args: g (f args)) origArgs;
|
||||||
in
|
in
|
||||||
if builtins.isAttrs ff then (ff // {
|
if builtins.isAttrs ff then (ff // {
|
||||||
override = overrideArgs;
|
override = overrideArgs;
|
||||||
overrideDerivation = fdrv:
|
overrideDerivation = fdrv: overrideResult (x: overrideDerivation x fdrv);
|
||||||
makeOverridable (args: overrideDerivation (f args) fdrv) origArgs;
|
|
||||||
${if ff ? overrideAttrs then "overrideAttrs" else null} = fdrv:
|
${if ff ? overrideAttrs then "overrideAttrs" else null} = fdrv:
|
||||||
makeOverridable (args: (f args).overrideAttrs fdrv) origArgs;
|
overrideResult (x: x.overrideAttrs fdrv);
|
||||||
})
|
})
|
||||||
else if lib.isFunction ff then {
|
else if lib.isFunction ff then {
|
||||||
override = overrideArgs;
|
override = overrideArgs;
|
||||||
|
Loading…
Reference in New Issue
Block a user