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:
parent
42f5a2fc29
commit
1aba0bf0fa
11 changed files with 30 additions and 25 deletions
|
@ -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())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue