1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-28 05:21:16 +02:00

nix-store -r: do substitutions in parallel

I.e. when multiple non-derivation arguments are passed to ‘nix-store
-r’ to be substituted, do them in parallel.
This commit is contained in:
Eelco Dolstra 2012-06-27 16:58:15 -04:00
parent 42f5a2fc29
commit 1aba0bf0fa
11 changed files with 30 additions and 25 deletions

View file

@ -2275,6 +2275,8 @@ public:
/* Callback used by the worker to write to the log. */
void handleChildOutput(int fd, const string & data);
void handleEOF(int fd);
Path getStorePath() { return storePath; }
};
@ -2938,7 +2940,7 @@ unsigned int Worker::exitStatus()
//////////////////////////////////////////////////////////////////////
void LocalStore::buildDerivations(const PathSet & drvPaths)
void LocalStore::buildPaths(const PathSet & drvPaths)
{
startNest(nest, lvlDebug,
format("building %1%") % showPaths(drvPaths));
@ -2947,7 +2949,10 @@ void LocalStore::buildDerivations(const PathSet & drvPaths)
Goals goals;
foreach (PathSet::const_iterator, i, drvPaths)
goals.insert(worker.makeDerivationGoal(*i));
if (isDerivation(*i))
goals.insert(worker.makeDerivationGoal(*i));
else
goals.insert(worker.makeSubstitutionGoal(*i));
worker.run(goals);
@ -2955,8 +2960,8 @@ void LocalStore::buildDerivations(const PathSet & drvPaths)
foreach (Goals::iterator, i, goals)
if ((*i)->getExitCode() == Goal::ecFailed) {
DerivationGoal * i2 = dynamic_cast<DerivationGoal *>(i->get());
assert(i2);
failed.insert(i2->getDrvPath());
if (i2) failed.insert(i2->getDrvPath());
else failed.insert(dynamic_cast<SubstitutionGoal *>(i->get())->getStorePath());
}
if (!failed.empty())