about summary refs log tree commit diff
path: root/src/libstore/misc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/misc.cc')
-rw-r--r--src/libstore/misc.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index f2b4c7a4ee60..2d7d13a0e7b4 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -19,7 +19,7 @@ Derivation derivationFromPath(const Path & drvPath)
 
 
 void computeFSClosure(const Path & storePath,
-    PathSet & paths, bool flipDirection)
+    PathSet & paths, bool flipDirection, bool includeOutputs)
 {
     if (paths.find(storePath) != paths.end()) return;
     paths.insert(storePath);
@@ -30,8 +30,15 @@ void computeFSClosure(const Path & storePath,
     else
         store->queryReferences(storePath, references);
 
+    if (includeOutputs && isDerivation(storePath)) {
+        Derivation drv = derivationFromPath(storePath);
+        foreach (DerivationOutputs::iterator, i, drv.outputs)
+            if (store->isValidPath(i->second.path))
+                computeFSClosure(i->second.path, paths, flipDirection, true);
+    }
+
     foreach (PathSet::iterator, i, references)
-        computeFSClosure(*i, paths, flipDirection);
+        computeFSClosure(*i, paths, flipDirection, includeOutputs);
 }