diff options
author | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2015-04-03 23:12:12 +0200 |
---|---|---|
committer | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2015-04-03 23:12:12 +0200 |
commit | 6de931a0f898bc132d73a67059326b6886cc84b1 (patch) | |
tree | a494d3f90da826fa983bfbd93e0ee2cff5f22ce8 /lib | |
parent | 7f1a782d91c537eb6972b8acd83e1957a65a93e4 (diff) | |
parent | a8d0614a602fd00d2e23e0e86fc748cc51c6f696 (diff) |
Merge rename.nix changes.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/customisation.nix | 52 | ||||
-rw-r--r-- | lib/debug.nix | 10 | ||||
-rw-r--r-- | lib/licenses.nix | 20 | ||||
-rw-r--r-- | lib/maintainers.nix | 7 | ||||
-rw-r--r-- | lib/trivial.nix | 21 |
5 files changed, 79 insertions, 31 deletions
diff --git a/lib/customisation.nix b/lib/customisation.nix index f16043cf9a3e3..91a25055df29a 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,11 @@ 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 */ addPassthru = drv: passthru: @@ -122,4 +124,38 @@ rec { outputsList = map outputToAttrListElement outputs; in commonAttrs.${drv.outputName}; + + + /* Strip a derivation of all non-essential attributes, returning + only those needed by hydra-eval-jobs. Also strictly evaluate the + result to ensure that there are no thunks kept alive to prevent + garbage collection. */ + hydraJob = drv: + let + outputs = drv.outputs or ["out"]; + + commonAttrs = + { inherit (drv) name system meta; inherit outputs; } + // lib.optionalAttrs (drv._hydraAggregate or false) { + _hydraAggregate = true; + constituents = map hydraJob (lib.flatten drv.constituents); + } + // (lib.listToAttrs outputsList); + + makeOutput = outputName: + let output = drv.${outputName}; in + { name = outputName; + value = commonAttrs // { + outPath = output.outPath; + drvPath = output.drvPath; + type = "derivation"; + inherit outputName; + }; + }; + + outputsList = map makeOutput outputs; + + drv' = (lib.head outputsList).value; + in lib.deepSeq drv' drv'; + } diff --git a/lib/debug.nix b/lib/debug.nix index 8852c22981c5e..2d10d981114c3 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 ); } diff --git a/lib/licenses.nix b/lib/licenses.nix index 9b3acf8653b66..08376b7e7e0e5 100644 --- a/lib/licenses.nix +++ b/lib/licenses.nix @@ -100,6 +100,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec { fullName = "Creative Commons Attribution 4.0"; }; + cc-by-sa-40 = spdx { + spdxId = "CC-BY-SA-4.0"; + fullName = "Creative Commons Attribution Share Alike 4.0"; + }; + cddl = spdx { spdxId = "CDDL-1.0"; fullName = "Common Development and Distribution License 1.0"; @@ -125,6 +130,16 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec { fullName = "Common Public License 1.0"; }; + efl10 = spdx { + spdxId = "EFL-1.0"; + fullName = "Eiffel Forum License v1.0"; + }; + + efl20 = spdx { + spdxId = "EFL-2.0"; + fullName = "Eiffel Forum License v2.0"; + }; + epl10 = spdx { spdxId = "EPL-1.0"; fullName = "Eclipse Public License 1.0"; @@ -282,6 +297,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec { fullName = "MIT License"; }; + mpl10 = spdx { + spdxId = "MPL-1.0"; + fullName = "Mozilla Public License 1.0"; + }; + mpl11 = spdx { spdxId = "MPL-1.1"; fullName = "Mozilla Public License 1.1"; diff --git a/lib/maintainers.nix b/lib/maintainers.nix index cee9f0023e245..fcc78723f4b32 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -5,6 +5,7 @@ alphabetically sorted. */ _1126 = "Christian Lask <mail@elfsechsundzwanzig.de>"; + abaldeau = "Andreas Baldeau <andreas@baldeau.net>"; abbradar = "Nikolay Amiantov <ab@fmap.me>"; aforemny = "Alexander Foremny <alexanderforemny@googlemail.com>"; aherrmann = "Andreas Herrmann <andreash87@gmx.ch>"; @@ -81,6 +82,7 @@ garrison = "Jim Garrison <jim@garrison.cc>"; gavin = "Gavin Rogers <gavin@praxeology.co.uk>"; gebner = "Gabriel Ebner <gebner@gebner.org>"; + giogadi = "Luis G. Torres <lgtorres42@gmail.com>"; globin = "Robin Gloster <robin@glob.in>"; goibhniu = "Cillian de Róiste <cillian.deroiste@gmail.com>"; gridaphobe = "Eric Seidel <eric@seidel.io>"; @@ -94,11 +96,13 @@ iyzsong = "Song Wenwu <iyzsong@gmail.com>"; j-keck = "Jürgen Keck <jhyphenkeck@gmail.com>"; jagajaga = "Arseniy Seroka <ars.seroka@gmail.com>"; + jb55 = "William Casarin <bill@casarin.me>"; jcumming = "Jack Cummings <jack@mudshark.org>"; jgeerds = "Jascha Geerds <jg@ekby.de>"; jirkamarsik = "Jirka Marsik <jiri.marsik89@gmail.com>"; joachifm = "Joachim Fasting <joachifm@fastmail.fm>"; joamaki = "Jussi Maki <joamaki@gmail.com>"; + joelmo = "Joel Moberg <joel.moberg@gmail.com>"; joelteon = "Joel Taylor <me@joelt.io>"; jpbernardy = "Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com>"; jwiegley = "John Wiegley <johnw@newartisans.com>"; @@ -141,6 +145,7 @@ orbitz = "Malcolm Matalka <mmatalka@gmail.com>"; page = "Carles Pagès <page@cubata.homelinux.net>"; paholg = "Paho Lurie-Gregg <paho@paholg.com>"; + pakhfn = "Fedor Pakhomov <pakhfn@gmail.com>"; pashev = "Igor Pashev <pashev.igor@gmail.com>"; phausmann = "Philipp Hausmann <nix@314.ch>"; phreedom = "Evgeny Egorochkin <phreedom@yandex.ru>"; @@ -185,9 +190,11 @@ tailhook = "Paul Colomiets <paul@colomiets.name>"; thammers = "Tobias Hammerschmidt <jawr@gmx.de>"; the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>"; + theuni = "Christian Theune <ct@flyingcircus.io>"; thoughtpolice = "Austin Seipp <aseipp@pobox.com>"; titanous = "Jonathan Rudenberg <jonathan@titanous.com>"; tomberek = "Thomas Bereknyei <tomberek@gmail.com>"; + trino = "Hubert Mühlhans <muehlhans.hubert@ekodia.de>"; tstrobel = "Thomas Strobel <ts468@cam.ac.uk>"; ttuegel = "Thomas Tuegel <ttuegel@gmail.com>"; tv = "Tomislav Viljetić <tv@shackspace.de>"; diff --git a/lib/trivial.nix b/lib/trivial.nix index ed59eff484736..8addde1b86cd2 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -1,8 +1,3 @@ -with { - inherit (import ./lists.nix) deepSeqList; - inherit (import ./attrsets.nix) deepSeqAttrs; -}; - rec { # Identity function. @@ -23,23 +18,11 @@ rec { # Flip the order of the arguments of a binary function. flip = f: a: b: f b a; - # `seq x y' evaluates x, then returns y. That is, it forces strict - # evaluation of its first argument. - seq = x: y: if x == null then y else y; - - # Like `seq', but recurses into lists and attribute sets to force evaluation - # of all list elements/attributes. - deepSeq = x: y: - if builtins.isList x - then deepSeqList x y - else if builtins.isAttrs x - then deepSeqAttrs x y - else seq x y; - # Pull in some builtins not included elsewhere. inherit (builtins) pathExists readFile isBool isFunction - isInt add sub lessThan; + isInt add sub lessThan + seq deepSeq; # Return the Nixpkgs version number. nixpkgsVersion = |