aboutsummaryrefslogtreecommitdiff
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 2c6bcf9f2..45997ebb2 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 5f20ee277..f3cc98bf4 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);
+}