about summary refs log tree commit diff
path: root/perl
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-02-05T15·02+0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-02-05T15·02+0100
commit8add116acd050bdcca84b8a092420566a6e6692c (patch)
tree7d262d713ef75c680d0d0c4a4d4e1792eaa53247 /perl
parentd6143801fdba7354180d8a56ae86f7825178dff2 (diff)
Nix::Store::derivationFromPath: Return derivation outputs
Diffstat (limited to 'perl')
-rw-r--r--perl/lib/Nix/Store.xs21
1 files changed, 12 insertions, 9 deletions
diff --git a/perl/lib/Nix/Store.xs b/perl/lib/Nix/Store.xs
index 00311aa8f3bf..8154bcbb0f4b 100644
--- a/perl/lib/Nix/Store.xs
+++ b/perl/lib/Nix/Store.xs
@@ -15,7 +15,7 @@
 using namespace nix;
 
 
-void doInit() 
+void doInit()
 {
     if (!store) {
         try {
@@ -237,32 +237,35 @@ SV * derivationFromPath(char * drvPath)
             doInit();
             Derivation drv = derivationFromPath(*store, drvPath);
             hash = newHV();
-            
-            /* TODO: handle drv.outputs */
-            
+
+            HV * outputs = newHV();
+            for (DerivationOutputs::iterator i = drv.outputs.begin(); i != drv.outputs.end(); ++i)
+                hv_store(outputs, i->first.c_str(), i->first.size(), newSVpv(i->second.path.c_str(), 0), 0);
+            hv_stores(hash, "outputs", newRV((SV *) outputs));
+
             AV * inputDrvs = newAV();
             for (DerivationInputs::iterator i = drv.inputDrvs.begin(); i != drv.inputDrvs.end(); ++i)
                 av_push(inputDrvs, newSVpv(i->first.c_str(), 0)); // !!! ignores i->second
             hv_stores(hash, "inputDrvs", newRV((SV *) inputDrvs));
-            
+
             AV * inputSrcs = newAV();
             for (PathSet::iterator i = drv.inputSrcs.begin(); i != drv.inputSrcs.end(); ++i)
                 av_push(inputSrcs, newSVpv(i->c_str(), 0));
             hv_stores(hash, "inputSrcs", newRV((SV *) inputSrcs));
-            
+
             hv_stores(hash, "platform", newSVpv(drv.platform.c_str(), 0));
             hv_stores(hash, "builder", newSVpv(drv.builder.c_str(), 0));
-            
+
             AV * args = newAV();
             for (Strings::iterator i = drv.args.begin(); i != drv.args.end(); ++i)
                 av_push(args, newSVpv(i->c_str(), 0));
             hv_stores(hash, "args", newRV((SV *) args));
-            
+
             HV * env = newHV();
             for (StringPairs::iterator i = drv.env.begin(); i != drv.env.end(); ++i)
                 hv_store(env, i->first.c_str(), i->first.size(), newSVpv(i->second.c_str(), 0), 0);
             hv_stores(hash, "env", newRV((SV *) env));
-            
+
             RETVAL = newRV_noinc((SV *)hash);
         } catch (Error & e) {
             croak(e.what());