diff options
Diffstat (limited to 'src/libstore/build.cc')
-rw-r--r-- | src/libstore/build.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 246e0d9da..d5bbd540b 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -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()) |