From 5990cce95f562ed185f55cb9bc3f230265d2ab9d Mon Sep 17 00:00:00 2001 From: Jan Malakhovski Date: Thu, 19 Mar 2015 15:48:54 +0000 Subject: [PATCH] lib: cleanup a little bit, add traceIf --- lib/customisation.nix | 17 +++++++++-------- lib/debug.nix | 10 ++++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/customisation.nix b/lib/customisation.nix index 960eebfc79b..91a25055df2 100644 --- a/lib/customisation.nix +++ b/lib/customisation.nix @@ -29,8 +29,8 @@ rec { For another application, see build-support/vm, where this function is used to build arbitrary derivations inside a QEMU - virtual machine. */ - + virtual machine. + */ overrideDerivation = drv: f: let newDrv = derivation (drv.drvAttrs // (f drv)); @@ -56,18 +56,17 @@ rec { makeOverridable = f: origArgs: let ff = f origArgs; + overrideWith = newArgs: origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs); in if builtins.isAttrs ff then (ff // - { override = newArgs: - makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs)); + { override = newArgs: makeOverridable f (overrideWith newArgs); deepOverride = newArgs: makeOverridable f (lib.overrideExisting (lib.mapAttrs (deepOverrider newArgs) origArgs) newArgs); overrideDerivation = fdrv: makeOverridable (args: overrideDerivation (f args) fdrv) origArgs; }) else if builtins.isFunction ff then - { override = newArgs: - makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs)); + { override = newArgs: makeOverridable f (overrideWith newArgs); __functor = self: ff; deepOverride = throw "deepOverride not yet supported for functors"; overrideDerivation = throw "overrideDerivation not yet supported for functors"; @@ -102,8 +101,10 @@ rec { }; */ callPackageWith = autoArgs: fn: args: - let f = if builtins.isFunction fn then fn else import fn; in - makeOverridable f ((builtins.intersectAttrs (builtins.functionArgs f) autoArgs) // args); + let + f = if builtins.isFunction fn then fn else import fn; + auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs; + in makeOverridable f (auto // args); /* Add attributes to each output of a derivation without changing the derivation itself */ diff --git a/lib/debug.nix b/lib/debug.nix index 8852c22981c..2d10d981114 100644 --- a/lib/debug.nix +++ b/lib/debug.nix @@ -13,10 +13,11 @@ rec { addErrorContextToAttrs = lib.mapAttrs (a: v: lib.addErrorContext "while evaluating ${a}" v); + traceIf = p: msg: x: if p then trace msg x else x; - traceVal = x: builtins.trace x x; - traceXMLVal = x: builtins.trace (builtins.toXML x) x; - traceXMLValMarked = str: x: builtins.trace (str + builtins.toXML x) x; + traceVal = x: trace x x; + traceXMLVal = x: trace (builtins.toXML x) x; + traceXMLValMarked = str: x: trace (str + builtins.toXML x) x; # this can help debug your code as well - designed to not produce thousands of lines traceShowVal = x : trace (showVal x) x; @@ -42,6 +43,7 @@ rec { traceCall2 = n : f : a : b : let t = n2 : x : traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b)); traceCall3 = n : f : a : b : c : let t = n2 : x : traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b) (t "arg 3" c)); + # FIXME: rename this? traceValIfNot = c: x: if c x then true else trace (showVal x) false; @@ -106,6 +108,6 @@ rec { ) else let r = strict expr; - in builtins.trace "${str}\n result:\n${builtins.toXML r}" r + in trace "${str}\n result:\n${builtins.toXML r}" r ); }