guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

300/376: import derivation: cleanup


From: Ludovic Courtès
Subject: 300/376: import derivation: cleanup
Date: Wed, 28 Jan 2015 22:05:45 +0000

civodul pushed a commit to tag 1.8
in repository guix.

commit b0c5c2ac346965f18224b105032df0c679112cab
Author: Shea Levy <address@hidden>
Date:   Thu Nov 20 22:48:12 2014 -0500

    import derivation: cleanup
    
    Before this there was a bug where a `find` was being called on a
    not-yet-sorted set. The code was just a mess before anyway, so I cleaned
    it up while fixing it.
---
 src/libexpr/primops.cc |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 6203a11..e6edffa 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -84,16 +84,19 @@ static void prim_scopedImport(EvalState & state, const Pos 
& pos, Value * * args
         Derivation drv = readDerivation(path);
         Value & w = *state.allocValue();
         state.mkAttrs(w, 2 + drv.outputs.size());
-        mkString(*state.allocAttr(w, state.sDrvPath), path, 
singleton<PathSet>("=" + path));
-        state.mkList(*state.allocAttr(w, state.symbols.create("outputs")), 
drv.outputs.size());
+        Value * v2 = state.allocAttr(w, state.sDrvPath);
+        mkString(*v2, path, singleton<PathSet>("=" + path));
+        Value * outputsVal =
+            state.allocAttr(w, state.symbols.create("outputs"));
+        state.mkList(*outputsVal, drv.outputs.size());
         unsigned int outputs_index = 0;
 
-        Value * outputsVal = 
w.attrs->find(state.symbols.create("outputs"))->value;
-        foreach (DerivationOutputs::iterator, i, drv.outputs) {
-            mkString(*state.allocAttr(w, state.symbols.create(i->first)),
-                i->second.path, singleton<PathSet>("!" + i->first + "!" + 
path));
-            mkString(*(outputsVal->list.elems[outputs_index++] = 
state.allocValue()),
-                i->first);
+        for (const auto & o : drv.outputs) {
+            v2 = state.allocAttr(w, state.symbols.create(o.first));
+            mkString(*v2, o.second.path,
+                singleton<PathSet>("!" + o.first + "!" + path));
+            outputsVal->list.elems[outputs_index] = state.allocValue();
+            mkString(*(outputsVal->list.elems[outputs_index++]), o.first);
         }
         w.attrs->sort();
         Value fun;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]