* `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:
parent
42043953c3
commit
a1d310b6b5
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue