aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/fetchers/registry.cc10
-rw-r--r--tests/flakes.sh1
2 files changed, 7 insertions, 4 deletions
diff --git a/src/libstore/fetchers/registry.cc b/src/libstore/fetchers/registry.cc
index 638e6e50a..69c80a5a9 100644
--- a/src/libstore/fetchers/registry.cc
+++ b/src/libstore/fetchers/registry.cc
@@ -127,10 +127,12 @@ static std::shared_ptr<Registry> getGlobalRegistry(ref<Store> store)
static auto reg = [&]() {
auto path = settings.flakeRegistry;
- if (!hasPrefix(path, "/"))
- // FIXME: register as GC root.
- // FIXME: if download fails, use previous version if available.
- path = store->toRealPath(downloadFile(store, path, "flake-registry.json", false).storePath);
+ if (!hasPrefix(path, "/")) {
+ auto storePath = downloadFile(store, path, "flake-registry.json", false).storePath;
+ if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
+ store2->addPermRoot(storePath, getCacheDir() + "/nix/flake-registry.json", true);
+ path = store->toRealPath(storePath);
+ }
return Registry::read(path, Registry::Global);
}();
diff --git a/tests/flakes.sh b/tests/flakes.sh
index 52f5fabc0..f2ebd7b0c 100644
--- a/tests/flakes.sh
+++ b/tests/flakes.sh
@@ -269,6 +269,7 @@ nix build -o $TEST_ROOT/result $flake3Dir#sth 2>&1 | grep 'unsupported edition'
# Test whether registry caching works.
nix flake list --flake-registry file://$registry | grep -q flake3
mv $registry $registry.tmp
+nix-store --gc
nix flake list --flake-registry file://$registry --refresh | grep -q flake3
mv $registry.tmp $registry