overrideDerivation: Simplify
Since we're just calling derivation again, drvAttrs is exactly what we want to pass, and we can get rid of the complicated "drop" logic. As a bonus, this actually makes it correct, since before "drop" removed the attribute named passthru but not actually the attributes added to the top-level attrset via passthru. Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
parent
1c2565a8ef
commit
6640000cb7
1 changed files with 4 additions and 7 deletions
|
@ -33,17 +33,14 @@ rec {
|
|||
|
||||
overrideDerivation = drv: f:
|
||||
let
|
||||
# Filter out special attributes.
|
||||
drop = [ "meta" "passthru" "outPath" "drvPath" "crossDrv" "nativeDrv" "type" "override" "deepOverride" "origArgs" "drvAttrs" "outputName" "all" "out" ]
|
||||
# also drop functions such as .merge .override etc
|
||||
++ lib.filter (n: isFunction (getAttr n drv)) (attrNames drv);
|
||||
attrs = removeAttrs drv drop;
|
||||
newDrv = derivation (attrs // (f drv));
|
||||
newDrv = derivation (drv.drvAttrs // (f drv));
|
||||
in newDrv //
|
||||
{ meta = if drv ? meta then drv.meta else {};
|
||||
{ meta = drv.meta or {};
|
||||
passthru = if drv ? passthru then drv.passthru else {};
|
||||
}
|
||||
//
|
||||
(drv.passthru or {})
|
||||
//
|
||||
(if (drv ? crossDrv && drv ? nativeDrv)
|
||||
then {
|
||||
crossDrv = overrideDerivation drv.crossDrv f;
|
||||
|
|
Loading…
Reference in a new issue