about summary refs log tree commit diff
path: root/src/nix-store
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-01-25T17·18+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-01-25T17·18+0000
commitfdcaf37361126793a1416ef5b348e5bf2f0fd1a0 (patch)
tree0e93d8cfb1f0aeabe303c9c74650d07e399c3c61 /src/nix-store
parent50e34891f0e11f400bd50390ede3b7700a2b4db9 (diff)
* Made `nix-store -qR --include-outputs' much faster if there are
  multiple paths specified on the command line (from O(n * m) to O(n +
  m), where n is the number of arguments and m is the size of the
  closure).

Diffstat (limited to 'src/nix-store')
-rw-r--r--src/nix-store/nix-store.cc40
1 files changed, 2 insertions, 38 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index b873baacb932..22effc65dc77 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -165,41 +165,6 @@ static void opPrintFixedPath(Strings opFlags, Strings opArgs)
 }
 
 
-/* Place in `paths' the set of paths that are required to `realise'
-   the given store path, i.e., all paths necessary for valid
-   deployment of the path.  For a derivation, this is the union of
-   requisites of the inputs, plus the derivation; for other store
-   paths, it is the set of paths in the FS closure of the path.  If
-   `includeOutputs' is true, include the requisites of the output
-   paths of derivations as well.
-
-   Note that this function can be used to implement three different
-   deployment policies:
-
-   - Source deployment (when called on a derivation).
-   - Binary deployment (when called on an output path).
-   - Source/binary deployment (when called on a derivation with
-     `includeOutputs' set to true).
-*/
-static void storePathRequisites(const Path & storePath,
-    bool includeOutputs, PathSet & paths)
-{
-    computeFSClosure(storePath, paths);
-
-    if (includeOutputs) {
-        for (PathSet::iterator i = paths.begin();
-             i != paths.end(); ++i)
-            if (isDerivation(*i)) {
-                Derivation drv = derivationFromPath(*i);
-                for (DerivationOutputs::iterator j = drv.outputs.begin();
-                     j != drv.outputs.end(); ++j)
-                    if (store->isValidPath(j->second.path))
-                        computeFSClosure(j->second.path, paths);
-            }
-    }
-}
-
-
 static Path maybeUseOutput(const Path & storePath, bool useOutput, bool forceRealise)
 {
     if (forceRealise) realisePath(storePath);
@@ -310,10 +275,9 @@ static void opQuery(Strings opFlags, Strings opArgs)
             PathSet paths;
             foreach (Strings::iterator, i, opArgs) {
                 Path path = maybeUseOutput(followLinksToStorePath(*i), useOutput, forceRealise);
-                if (query == qRequisites)
-                    storePathRequisites(path, includeOutputs, paths);
+                if (query == qRequisites) computeFSClosure(path, paths, false, includeOutputs);
                 else if (query == qReferences) store->queryReferences(path, paths);
-                else if (query == qReferrers) store->queryReferrers(path,  paths);
+                else if (query == qReferrers) store->queryReferrers(path, paths);
                 else if (query == qReferrersClosure) computeFSClosure(path, paths, true);
             }
             Paths sorted = topoSortPaths(paths);