Remove deepOverride
It's unused, and also a bad idea: because it recursively recomputes every function argument and there is no sharing, you can get an exponential (?) blowup in evaluation time. For example, evaluating ‘linuxPackages.kernel’ takes 0.09s and ~13 MiB, but evaluating ‘linuxPackages.kernel.deepOverride {}’ takes 3.6s and ~305 MiB.
This commit is contained in:
parent
2bc305c1c6
commit
314e8e49ec
@ -49,10 +49,6 @@ rec {
|
|||||||
else { }));
|
else { }));
|
||||||
|
|
||||||
|
|
||||||
# usage: (you can use override multiple times)
|
|
||||||
# let d = makeOverridable stdenv.mkDerivation { name = ..; buildInputs; }
|
|
||||||
# noBuildInputs = d.override { buildInputs = []; }
|
|
||||||
# additionalBuildInputs = d.override ( args : args // { buildInputs = args.buildInputs ++ [ additional ]; } )
|
|
||||||
makeOverridable = f: origArgs:
|
makeOverridable = f: origArgs:
|
||||||
let
|
let
|
||||||
ff = f origArgs;
|
ff = f origArgs;
|
||||||
@ -60,24 +56,16 @@ rec {
|
|||||||
in
|
in
|
||||||
if builtins.isAttrs ff then (ff //
|
if builtins.isAttrs ff then (ff //
|
||||||
{ override = newArgs: makeOverridable f (overrideWith newArgs);
|
{ override = newArgs: makeOverridable f (overrideWith newArgs);
|
||||||
deepOverride = newArgs:
|
|
||||||
makeOverridable f (lib.overrideExisting (lib.mapAttrs (deepOverrider newArgs) origArgs) newArgs);
|
|
||||||
overrideDerivation = fdrv:
|
overrideDerivation = fdrv:
|
||||||
makeOverridable (args: overrideDerivation (f args) fdrv) origArgs;
|
makeOverridable (args: overrideDerivation (f args) fdrv) origArgs;
|
||||||
})
|
})
|
||||||
else if builtins.isFunction ff then
|
else if builtins.isFunction ff then
|
||||||
{ override = newArgs: makeOverridable f (overrideWith newArgs);
|
{ override = newArgs: makeOverridable f (overrideWith newArgs);
|
||||||
__functor = self: ff;
|
__functor = self: ff;
|
||||||
deepOverride = throw "deepOverride not yet supported for functors";
|
|
||||||
overrideDerivation = throw "overrideDerivation not yet supported for functors";
|
overrideDerivation = throw "overrideDerivation not yet supported for functors";
|
||||||
}
|
}
|
||||||
else ff;
|
else ff;
|
||||||
|
|
||||||
deepOverrider = newArgs: name: x: if builtins.isAttrs x then (
|
|
||||||
if x ? deepOverride then (x.deepOverride newArgs) else
|
|
||||||
if x ? override then (x.override newArgs) else
|
|
||||||
x) else x;
|
|
||||||
|
|
||||||
|
|
||||||
/* Call the package function in the file `fn' with the required
|
/* Call the package function in the file `fn' with the required
|
||||||
arguments automatically. The function is called with the
|
arguments automatically. The function is called with the
|
||||||
|
@ -29,7 +29,6 @@ rec {
|
|||||||
} ));
|
} ));
|
||||||
withStdOverrides = base // {
|
withStdOverrides = base // {
|
||||||
override = base.passthru.function;
|
override = base.passthru.function;
|
||||||
deepOverride = a : (base.passthru.function ((lib.mapAttrs (lib.deepOverrider a) base.passthru.args) // a));
|
|
||||||
} ;
|
} ;
|
||||||
in
|
in
|
||||||
withStdOverrides;
|
withStdOverrides;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user