about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-01-25T11·18+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-01-25T11·18+0000
commit52bf9b86bb79369b7f7b5b8a5726b83ee154da6a (patch)
treecda06cd7d3bb5d8d3a62a6881533a36860c7acfb /src/libstore
parent80faa2f98af8616ab89ac2af63431b887a84fb32 (diff)
* In nix-store: added query `--referers-closure' that returns the
  closure of the referers relation rather than the references
  relation, i.e., the set of all paths that directly or indirectly
  refer to the given path.  Note that contrary to the references
  closure this set is not fixed; it can change as paths are added to
  or removed from the store.

Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build.hh7
-rw-r--r--src/libstore/misc.cc9
2 files changed, 11 insertions, 5 deletions
diff --git a/src/libstore/build.hh b/src/libstore/build.hh
index ed83d678ec66..52e7c9b9d5de 100644
--- a/src/libstore/build.hh
+++ b/src/libstore/build.hh
@@ -21,9 +21,12 @@ Derivation derivationFromPath(const Path & drvPath);
 
 /* Place in `paths' the set of all store paths in the file system
    closure of `storePath'; that is, all paths than can be directly or
-   indirectly reached from it.  `paths' is not cleared. */
+   indirectly reached from it.  `paths' is not cleared.  If
+   `flipDirection' is true, the set of paths that can reach
+   `storePath' is returned; that is, the closures under the `referers'
+   relation instead of the `references' relation is returned. */
 void computeFSClosure(const Path & storePath,
-    PathSet & paths);
+    PathSet & paths, bool flipDirection = false);
 
 /* Place in `paths' the set of paths that are required to `realise'
    the given store path, i.e., all paths necessary for valid
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index dbb9273f7955..802e576512f1 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -12,17 +12,20 @@ Derivation derivationFromPath(const Path & drvPath)
 
 
 void computeFSClosure(const Path & storePath,
-    PathSet & paths)
+    PathSet & paths, bool flipDirection)
 {
     if (paths.find(storePath) != paths.end()) return;
     paths.insert(storePath);
 
     PathSet references;
-    queryReferences(storePath, references);
+    if (flipDirection)
+        queryReferers(storePath, references);
+    else
+        queryReferences(storePath, references);
 
     for (PathSet::iterator i = references.begin();
          i != references.end(); ++i)
-        computeFSClosure(*i, paths);
+        computeFSClosure(*i, paths, flipDirection);
 }