forked from lix-project/lix
* `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 "globals.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
#include "misc.hh"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cctype>
|
#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)
|
static void setLogType(string lt)
|
||||||
{
|
{
|
||||||
if (lt == "pretty") logType = ltPretty;
|
if (lt == "pretty") logType = ltPretty;
|
||||||
|
|
|
@ -26,6 +26,8 @@ namespace nix {
|
||||||
Path makeRootName(const Path & gcRoot, int & counter);
|
Path makeRootName(const Path & gcRoot, int & counter);
|
||||||
void printGCWarning();
|
void printGCWarning();
|
||||||
|
|
||||||
|
void printMissing(const PathSet & paths);
|
||||||
|
|
||||||
unsigned long long getIntArg(const string & opt,
|
unsigned long long getIntArg(const string & opt,
|
||||||
Strings::iterator & i, const Strings::iterator & end);
|
Strings::iterator & i, const Strings::iterator & end);
|
||||||
|
|
||||||
|
|
|
@ -531,8 +531,8 @@ static void queryInstSources(EvalState & state,
|
||||||
|
|
||||||
static void printMissing(EvalState & state, const DrvInfos & elems)
|
static void printMissing(EvalState & state, const DrvInfos & elems)
|
||||||
{
|
{
|
||||||
PathSet targets, willBuild, willSubstitute, unknown;
|
PathSet targets;
|
||||||
for (DrvInfos::const_iterator i = elems.begin(); i != elems.end(); ++i) {
|
foreach (DrvInfos::const_iterator, i, elems) {
|
||||||
Path drvPath = i->queryDrvPath(state);
|
Path drvPath = i->queryDrvPath(state);
|
||||||
if (drvPath != "")
|
if (drvPath != "")
|
||||||
targets.insert(drvPath);
|
targets.insert(drvPath);
|
||||||
|
@ -540,28 +540,7 @@ static void printMissing(EvalState & state, const DrvInfos & elems)
|
||||||
targets.insert(i->queryOutPath(state));
|
targets.insert(i->queryOutPath(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long long downloadSize;
|
printMissing(targets);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -77,23 +77,26 @@ static Path realisePath(const Path & path)
|
||||||
/* Realise the given paths. */
|
/* Realise the given paths. */
|
||||||
static void opRealise(Strings opFlags, Strings opArgs)
|
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();
|
foreach (Strings::iterator, i, opArgs)
|
||||||
i != opArgs.end(); ++i)
|
|
||||||
*i = followLinksToStorePath(*i);
|
*i = followLinksToStorePath(*i);
|
||||||
|
|
||||||
if (opArgs.size() > 1) {
|
printMissing(PathSet(opArgs.begin(), opArgs.end()));
|
||||||
PathSet drvPaths;
|
|
||||||
for (Strings::iterator i = opArgs.begin();
|
if (dryRun) return;
|
||||||
i != opArgs.end(); ++i)
|
|
||||||
if (isDerivation(*i))
|
/* Build all derivations at the same time to exploit parallelism. */
|
||||||
drvPaths.insert(*i);
|
PathSet drvPaths;
|
||||||
store->buildDerivations(drvPaths);
|
foreach (Strings::iterator, i, opArgs)
|
||||||
}
|
if (isDerivation(*i)) drvPaths.insert(*i);
|
||||||
|
store->buildDerivations(drvPaths);
|
||||||
|
|
||||||
for (Strings::iterator i = opArgs.begin();
|
foreach (Strings::iterator, i,opArgs)
|
||||||
i != opArgs.end(); ++i)
|
|
||||||
cout << format("%1%\n") % realisePath(*i);
|
cout << format("%1%\n") % realisePath(*i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue