about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build.hh5
-rw-r--r--src/libstore/misc.cc9
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libstore/build.hh b/src/libstore/build.hh
index 2c6bcf9f2dea..45997ebb24d0 100644
--- a/src/libstore/build.hh
+++ b/src/libstore/build.hh
@@ -28,4 +28,9 @@ Derivation derivationFromPath(const Path & drvPath);
 void computeFSClosure(const Path & storePath,
     PathSet & paths, bool flipDirection = false);
 
+/* Return the path corresponding to the output identifier `id' in the
+   given derivation. */
+Path findOutput(const Derivation & drv, string id);
+    
+
 #endif /* !__BUILD_H */
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index 5f20ee277513..f3cc98bf4e2a 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -27,3 +27,12 @@ void computeFSClosure(const Path & storePath,
          i != references.end(); ++i)
         computeFSClosure(*i, paths, flipDirection);
 }
+
+
+ Path findOutput(const Derivation & drv, string id)
+{
+    for (DerivationOutputs::const_iterator i = drv.outputs.begin();
+         i != drv.outputs.end(); ++i)
+        if (i->first == id) return i->second.path;
+    throw Error(format("derivation has no output `%1%'") % id);
+}