mirror of
https://github.com/NixOS/nix.git
synced 2025-11-16 15:32:43 +01:00
Move getAccessorCached() to InputCache
Also, make fetchTree use InputCache.
This commit is contained in:
parent
3bbf917707
commit
dd15c8a20d
4 changed files with 70 additions and 66 deletions
|
|
@ -1,8 +1,48 @@
|
|||
#include "nix/fetchers/input-cache.hh"
|
||||
#include "nix/fetchers/registry.hh"
|
||||
#include "nix/util/sync.hh"
|
||||
#include "nix/util/source-path.hh"
|
||||
|
||||
namespace nix::fetchers {
|
||||
|
||||
InputCache::CachedResult InputCache::getAccessor(ref<Store> store, const Input & originalInput, bool useRegistries)
|
||||
{
|
||||
auto fetched = lookup(originalInput);
|
||||
Input resolvedInput = originalInput;
|
||||
|
||||
if (!fetched) {
|
||||
if (originalInput.isDirect()) {
|
||||
auto [accessor, lockedInput] = originalInput.getAccessor(store);
|
||||
fetched.emplace(CachedInput{.lockedInput = lockedInput, .accessor = accessor});
|
||||
} else {
|
||||
if (useRegistries) {
|
||||
auto [res, extraAttrs] =
|
||||
lookupInRegistries(store, originalInput, [](fetchers::Registry::RegistryType type) {
|
||||
/* Only use the global registry and CLI flags
|
||||
to resolve indirect flakerefs. */
|
||||
return type == fetchers::Registry::Flag || type == fetchers::Registry::Global;
|
||||
});
|
||||
resolvedInput = std::move(res);
|
||||
fetched = lookup(resolvedInput);
|
||||
if (!fetched) {
|
||||
auto [accessor, lockedInput] = resolvedInput.getAccessor(store);
|
||||
fetched.emplace(CachedInput{.lockedInput = lockedInput, .accessor = accessor});
|
||||
}
|
||||
upsert(resolvedInput, *fetched);
|
||||
} else {
|
||||
throw Error(
|
||||
"'%s' is an indirect flake reference, but registry lookups are not allowed",
|
||||
originalInput.to_string());
|
||||
}
|
||||
}
|
||||
upsert(originalInput, *fetched);
|
||||
}
|
||||
|
||||
debug("got tree '%s' from '%s'", fetched->accessor, fetched->lockedInput.to_string());
|
||||
|
||||
return {fetched->accessor, resolvedInput, fetched->lockedInput};
|
||||
}
|
||||
|
||||
struct InputCacheImpl : InputCache
|
||||
{
|
||||
Sync<std::map<Input, CachedInput>> cache_;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue