diff options
Diffstat (limited to 'src/nix-store')
-rw-r--r-- | src/nix-store/help.txt | 13 | ||||
-rw-r--r-- | src/nix-store/main.cc | 70 |
2 files changed, 42 insertions, 41 deletions
diff --git a/src/nix-store/help.txt b/src/nix-store/help.txt index cbded730e866..1bd752fc11c6 100644 --- a/src/nix-store/help.txt +++ b/src/nix-store/help.txt @@ -4,14 +4,12 @@ nix-store [OPTIONS...] [ARGUMENTS...] Operations: - --realise / -r: realise a Nix expression - --delete / -d: delete paths from the Nix store + --build / -b: build a Nix derivation --add / -A: copy a path to the Nix store --query / -q: query information - --successor: register a successor expression (dangerous!) --substitute: register a substitute expression (dangerous!) - --clear-substitute: clear all substitutes + --clear-substitutes: clear all substitutes --validpath: register path validity (dangerous!) --isvalid: check path validity @@ -26,9 +24,10 @@ Operations: Query flags: - --list / -l: query the output paths (roots) of a Nix expression (default) - --requisites / -R: print all paths necessary to realise expression - --predecessors: print predecessors of a Nix expression + --outputs: query the output paths of a Nix derivation (default) + --requisites / -R: print all paths necessary to realise a path + --references: print all paths referenced by the given path + --referers: print all paths refering to the given path --graph: print a dot graph rooted at given ids Options: diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc index 5a67a6af647d..12b61c76f787 100644 --- a/src/nix-store/main.cc +++ b/src/nix-store/main.cc @@ -18,6 +18,15 @@ void printHelp() } +static 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); +} + + /* Build the given derivations. */ static void opBuild(Strings opFlags, Strings opArgs) { @@ -25,7 +34,11 @@ static void opBuild(Strings opFlags, Strings opArgs) for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); i++) + { buildDerivation(*i); + Derivation drv = derivationFromPath(*i); + cout << format("%1%\n") % findOutput(drv, "out"); + } } @@ -40,70 +53,59 @@ static void opAdd(Strings opFlags, Strings opArgs) } -#if 0 -Path maybeNormalise(const Path & ne, bool normalise, bool realise) +static Path maybeUseOutput(const Path & storePath, bool useOutput) { - if (realise) { - Path ne2 = realiseStoreExpr(ne); - return normalise ? ne2 : ne; - } else - return normalise ? normaliseStoreExpr(ne) : ne; + if (useOutput && isDerivation(storePath)) { + Derivation drv = derivationFromPath(storePath); + return findOutput(drv, "out"); + } + else return storePath; } /* Perform various sorts of queries. */ static void opQuery(Strings opFlags, Strings opArgs) { - enum { qList, qRequisites, qPredecessors, qGraph - } query = qList; - bool normalise = false; - bool realise = false; - bool includeExprs = true; - bool includeSuccessors = false; + enum { qOutputs, qRequisites, qPredecessors, qGraph } query = qOutputs; + bool useOutput = false; + bool includeOutputs = false; for (Strings::iterator i = opFlags.begin(); i != opFlags.end(); i++) - if (*i == "--list" || *i == "-l") query = qList; + if (*i == "--outputs") query = qOutputs; else if (*i == "--requisites" || *i == "-R") query = qRequisites; - else if (*i == "--predecessors") query = qPredecessors; else if (*i == "--graph") query = qGraph; - else if (*i == "--normalise" || *i == "-n") normalise = true; - else if (*i == "--force-realise" || *i == "-f") realise = true; - else if (*i == "--exclude-exprs") includeExprs = false; - else if (*i == "--include-successors") includeSuccessors = true; + else if (*i == "--use-output" || *i == "-u") useOutput = true; + else if (*i == "--include-outputs") includeOutputs = true; else throw UsageError(format("unknown flag `%1%'") % *i); switch (query) { - case qList: { + case qOutputs: { for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); i++) { - StringSet paths = storeExprRoots( - maybeNormalise(*i, normalise, realise)); - for (StringSet::iterator j = paths.begin(); - j != paths.end(); j++) - cout << format("%s\n") % *j; + Derivation drv = derivationFromPath(*i); + cout << format("%1%\n") % findOutput(drv, "out"); } break; } case qRequisites: { - StringSet paths; + PathSet paths; for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); i++) { - StringSet paths2 = storeExprRequisites( - maybeNormalise(*i, normalise, realise), - includeExprs, includeSuccessors); - paths.insert(paths2.begin(), paths2.end()); + Path path = maybeUseOutput(*i, useOutput); + storePathRequisites(path, includeOutputs, paths); } - for (StringSet::iterator i = paths.begin(); + for (PathSet::iterator i = paths.begin(); i != paths.end(); i++) cout << format("%s\n") % *i; break; } +#if 0 case qPredecessors: { for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); i++) @@ -124,12 +126,12 @@ static void opQuery(Strings opFlags, Strings opArgs) printDotGraph(roots); break; } +#endif default: abort(); } } -#endif static void opSubstitute(Strings opFlags, Strings opArgs) @@ -340,8 +342,8 @@ void run(Strings args) op = opBuild; else if (arg == "--add" || arg == "-A") op = opAdd; - // else if (arg == "--query" || arg == "-q") - // op = opQuery; + else if (arg == "--query" || arg == "-q") + op = opQuery; else if (arg == "--substitute") op = opSubstitute; else if (arg == "--clear-substitutes") |