From edf9eb8181e01f6b2123e5690019cfeeb44fc1c2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 7 Oct 2016 19:57:47 +0200 Subject: [PATCH] querySubstitutablePaths(): Don't query paths for which we already have a substituter --- src/libstore/local-store.cc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 41e1c37a0..4f2c433b8 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -781,14 +781,27 @@ Path LocalStore::queryPathFromHashPart(const string & hashPart) PathSet LocalStore::querySubstitutablePaths(const PathSet & paths) { if (!settings.useSubstitutes) return PathSet(); + + auto remaining = paths; PathSet res; + for (auto & sub : getDefaultSubstituters()) { - if (res.size() == paths.size()) break; + if (remaining.empty()) break; if (sub->storeDir != storeDir) continue; if (!sub->wantMassQuery()) continue; - for (auto path : sub->queryValidPaths(paths)) - res.insert(path); + + auto valid = sub->queryValidPaths(remaining); + + PathSet remaining2; + for (auto & path : remaining) + if (valid.count(path)) + res.insert(path); + else + remaining2.insert(path); + + std::swap(remaining, remaining2); } + return res; }