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 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> getDefaultSubstituters() for (auto uri : settings.extraSubstituters.get()) addStore(uri); + stores.sort([](ref & a, ref & 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;