diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2020-08-14 17:05:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-14 17:05:47 +0200 |
commit | 9b9d5297baf02923a1e2879441bc1e25190d01cc (patch) | |
tree | cde8f4722537ad8638dbe604c23c7e115bc0fcb7 /src | |
parent | d81f13f7cbb3989477d092b712877fb0835fd155 (diff) | |
parent | 96c158d6e1c6c3bed6451a3c6447d2b0bd0337ad (diff) |
Merge pull request #3909 from matthewbauer/readd-hashed-mirrors
Add hashed-mirrors back
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/builtins/fetchurl.cc | 14 | ||||
-rw-r--r-- | src/libstore/globals.hh | 3 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/libstore/builtins/fetchurl.cc b/src/libstore/builtins/fetchurl.cc index 6585a480d..4fb5d8a06 100644 --- a/src/libstore/builtins/fetchurl.cc +++ b/src/libstore/builtins/fetchurl.cc @@ -58,6 +58,20 @@ void builtinFetchurl(const BasicDerivation & drv, const std::string & netrcData) } }; + /* Try the hashed mirrors first. */ + if (getAttr("outputHashMode") == "flat") + for (auto hashedMirror : settings.hashedMirrors.get()) + try { + if (!hasSuffix(hashedMirror, "/")) hashedMirror += '/'; + std::optional<HashType> ht = parseHashTypeOpt(getAttr("outputHashAlgo")); + Hash h = newHashAllowEmpty(getAttr("outputHash"), ht); + fetch(hashedMirror + printHashType(h.type) + "/" + h.to_string(Base16, false)); + return; + } catch (Error & e) { + debug(e.what()); + } + + /* Otherwise try the specified URL. */ fetch(mainUrl); } diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 3406a9331..e3bb4cf84 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -335,6 +335,9 @@ public: "setuid/setgid bits or with file capabilities."}; #endif + Setting<Strings> hashedMirrors{this, {}, "hashed-mirrors", + "A list of servers used by builtins.fetchurl to fetch files by hash."}; + Setting<uint64_t> minFree{this, 0, "min-free", "Automatically run the garbage collector when free disk space drops below the specified amount."}; |