aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/binary-cache-store.hh2
-rw-r--r--src/libstore/store-api.cc4
-rw-r--r--src/libstore/store-api.hh5
3 files changed, 11 insertions, 0 deletions
diff --git a/src/libstore/binary-cache-store.hh b/src/libstore/binary-cache-store.hh
index bf5a56ab4..f9c1c2cbe 100644
--- a/src/libstore/binary-cache-store.hh
+++ b/src/libstore/binary-cache-store.hh
@@ -123,6 +123,8 @@ public:
std::shared_ptr<std::string> getBuildLog(const Path & path) override;
+ int getPriority() override { return priority; }
+
};
}
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index db2e023ab..108e2d4ce 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -812,6 +812,10 @@ std::list<ref<Store>> getDefaultSubstituters()
for (auto uri : settings.extraSubstituters.get())
addStore(uri);
+ stores.sort([](ref<Store> & a, ref<Store> & b) {
+ return a->getPriority() < b->getPriority();
+ });
+
return stores;
} ());
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index c625a3630..cada37653 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -590,6 +590,11 @@ public:
a notion of connection. Otherwise this is a no-op. */
virtual void connect() { };
+ /* Get the priority of the store, used to order substituters. In
+ particular, binary caches can specify a priority field in their
+ "nix-cache-info" file. Lower value means higher priority. */
+ virtual int getPriority() { return 0; }
+
protected:
Stats stats;