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 getGlobalRegistry(ref 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()) + 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