From 5adbb0aabe54479304453bf5e544f84b40ee7dd7 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Aug 2008 13:15:35 +0000 Subject: * build.cc: only use a substituter if it returns info for a path. --- src/libstore/build.cc | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) (limited to 'src/libstore/build.cc') diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 22f1c64ae3..33a53c148f 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -2187,14 +2187,34 @@ void SubstitutionGoal::init() return; } - if (!worker.store.querySubstitutablePathInfo(storePath, info)) { + subs = substituters; + + tryNext(); +} + + +void SubstitutionGoal::tryNext() +{ + trace("trying next substituter"); + + if (subs.size() == 0) { + /* None left. Terminate this goal and let someone else deal + with it. */ printMsg(lvlError, - format("path `%1%' is required, but there is no substituter that knows anything about it") + format("path `%1%' is required, but there is no substituter that can build it") % storePath); amDone(ecFailed); return; } + sub = subs.front(); + subs.pop_front(); + + if (!worker.store.querySubstitutablePathInfo(sub, storePath, info)) { + tryNext(); + return; + } + /* To maintain the closure invariant, we first have to realise the paths referenced by this one. */ foreach (PathSet::iterator, i, info.references) @@ -2223,29 +2243,6 @@ void SubstitutionGoal::referencesValid() if (*i != storePath) /* ignore self-references */ assert(worker.store.isValidPath(*i)); - subs = substituters; - - tryNext(); -} - - -void SubstitutionGoal::tryNext() -{ - trace("trying next substituter"); - - if (subs.size() == 0) { - /* None left. Terminate this goal and let someone else deal - with it. */ - printMsg(lvlError, - format("path `%1%' is required, but there is no substituter that can build it") - % storePath); - amDone(ecFailed); - return; - } - - sub = subs.front(); - subs.pop_front(); - state = &SubstitutionGoal::tryToRun; worker.waitForBuildSlot(shared_from_this()); } -- cgit 1.4.1