* `nix-store --realise': print what paths will be built/downloaded,

just like nix-env.
* `nix-store --realise': --dry-run option.
This commit is contained in:
Eelco Dolstra 2008-08-04 13:44:46 +00:00
parent 42043953c3
commit a1d310b6b5
4 changed files with 50 additions and 37 deletions

View File

@ -4,6 +4,7 @@
#include "globals.hh"
#include "store-api.hh"
#include "util.hh"
#include "misc.hh"
#include <iostream>
#include <cctype>
@ -49,6 +50,34 @@ void printGCWarning()
}
void printMissing(const PathSet & paths)
{
unsigned long long downloadSize;
PathSet willBuild, willSubstitute, unknown;
queryMissing(paths, willBuild, willSubstitute, unknown, downloadSize);
if (!willBuild.empty()) {
printMsg(lvlInfo, format("the following derivations will be built:"));
foreach (PathSet::iterator, i, willBuild)
printMsg(lvlInfo, format(" %1%") % *i);
}
if (!willSubstitute.empty()) {
printMsg(lvlInfo, format("the following paths will be downloaded/copied (%.2f MiB):") %
(downloadSize / (1024.0 * 1024.0)));
foreach (PathSet::iterator, i, willSubstitute)
printMsg(lvlInfo, format(" %1%") % *i);
}
if (!unknown.empty()) {
printMsg(lvlInfo, format("don't know how to build the following paths%1%:")
% (readOnlyMode ? " (may be caused by read-only store access)" : ""));
foreach (PathSet::iterator, i, unknown)
printMsg(lvlInfo, format(" %1%") % *i);
}
}
static void setLogType(string lt)
{
if (lt == "pretty") logType = ltPretty;

View File

@ -26,6 +26,8 @@ namespace nix {
Path makeRootName(const Path & gcRoot, int & counter);
void printGCWarning();
void printMissing(const PathSet & paths);
unsigned long long getIntArg(const string & opt,
Strings::iterator & i, const Strings::iterator & end);

View File

@ -531,8 +531,8 @@ static void queryInstSources(EvalState & state,
static void printMissing(EvalState & state, const DrvInfos & elems)
{
PathSet targets, willBuild, willSubstitute, unknown;
for (DrvInfos::const_iterator i = elems.begin(); i != elems.end(); ++i) {
PathSet targets;
foreach (DrvInfos::const_iterator, i, elems) {
Path drvPath = i->queryDrvPath(state);
if (drvPath != "")
targets.insert(drvPath);
@ -540,28 +540,7 @@ static void printMissing(EvalState & state, const DrvInfos & elems)
targets.insert(i->queryOutPath(state));
}
unsigned long long downloadSize;
queryMissing(targets, willBuild, willSubstitute, unknown, downloadSize);
if (!willBuild.empty()) {
printMsg(lvlInfo, format("the following derivations will be built:"));
foreach (PathSet::iterator, i, willBuild)
printMsg(lvlInfo, format(" %1%") % *i);
}
if (!willSubstitute.empty()) {
printMsg(lvlInfo, format("the following paths will be downloaded/copied (%.2f MiB):") %
(downloadSize / (1024.0 * 1024.0)));
foreach (PathSet::iterator, i, willSubstitute)
printMsg(lvlInfo, format(" %1%") % *i);
}
if (!unknown.empty()) {
printMsg(lvlInfo, format("don't know how to build the following paths%1%:")
% (readOnlyMode ? " (may be caused by read-only store access)" : ""));
foreach (PathSet::iterator, i, unknown)
printMsg(lvlInfo, format(" %1%") % *i);
}
printMissing(targets);
}

View File

@ -77,23 +77,26 @@ static Path realisePath(const Path & path)
/* Realise the given paths. */
static void opRealise(Strings opFlags, Strings opArgs)
{
if (!opFlags.empty()) throw UsageError("unknown flag");
bool dryRun = false;
foreach (Strings::iterator, i, opFlags)
if (*i == "--dry-run") dryRun = true;
else throw UsageError(format("unknown flag `%1%'") % *i);
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); ++i)
foreach (Strings::iterator, i, opArgs)
*i = followLinksToStorePath(*i);
if (opArgs.size() > 1) {
PathSet drvPaths;
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); ++i)
if (isDerivation(*i))
drvPaths.insert(*i);
store->buildDerivations(drvPaths);
}
printMissing(PathSet(opArgs.begin(), opArgs.end()));
if (dryRun) return;
/* Build all derivations at the same time to exploit parallelism. */
PathSet drvPaths;
foreach (Strings::iterator, i, opArgs)
if (isDerivation(*i)) drvPaths.insert(*i);
store->buildDerivations(drvPaths);
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); ++i)
foreach (Strings::iterator, i,opArgs)
cout << format("%1%\n") % realisePath(*i);
}