1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 19:46:02 +01:00

Fix flake registry ignoring dir parameter

This broke in e3042f10af.
This commit is contained in:
Cole Helbling 2025-09-07 15:27:14 +02:00
parent 258d41bfb6
commit bccdb95a86
3 changed files with 8 additions and 4 deletions

View file

@ -11,6 +11,7 @@ struct InputCache
ref<SourceAccessor> accessor;
Input resolvedInput;
Input lockedInput;
Attrs extraAttrs;
};
CachedResult getAccessor(ref<Store> store, const Input & originalInput, UseRegistries useRegistries);

View file

@ -8,6 +8,7 @@ namespace nix::fetchers {
InputCache::CachedResult
InputCache::getAccessor(ref<Store> store, const Input & originalInput, UseRegistries useRegistries)
{
Attrs extraAttrs;
auto fetched = lookup(originalInput);
Input resolvedInput = originalInput;
@ -17,7 +18,8 @@ InputCache::getAccessor(ref<Store> store, const Input & originalInput, UseRegist
fetched.emplace(CachedInput{.lockedInput = lockedInput, .accessor = accessor});
} else {
if (useRegistries != UseRegistries::No) {
auto [res, extraAttrs] = lookupInRegistries(store, originalInput, useRegistries);
auto [res, extraAttrs_] = lookupInRegistries(store, originalInput, useRegistries);
extraAttrs = extraAttrs_;
resolvedInput = std::move(res);
fetched = lookup(resolvedInput);
if (!fetched) {
@ -36,7 +38,7 @@ InputCache::getAccessor(ref<Store> store, const Input & originalInput, UseRegist
debug("got tree '%s' from '%s'", fetched->accessor, fetched->lockedInput.to_string());
return {fetched->accessor, resolvedInput, fetched->lockedInput};
return {fetched->accessor, resolvedInput, fetched->lockedInput, extraAttrs};
}
struct InputCacheImpl : InputCache

View file

@ -341,8 +341,9 @@ static Flake getFlake(
// Fetch a lazy tree first.
auto cachedInput = state.inputCache->getAccessor(state.store, originalRef.input, useRegistries);
auto resolvedRef = FlakeRef(std::move(cachedInput.resolvedInput), originalRef.subdir);
auto lockedRef = FlakeRef(std::move(cachedInput.lockedInput), originalRef.subdir);
auto subdir = fetchers::maybeGetStrAttr(cachedInput.extraAttrs, "dir").value_or(originalRef.subdir);
auto resolvedRef = FlakeRef(std::move(cachedInput.resolvedInput), subdir);
auto lockedRef = FlakeRef(std::move(cachedInput.lockedInput), subdir);
// Parse/eval flake.nix to get at the input.self attributes.
auto flake = readFlake(state, originalRef, resolvedRef, lockedRef, {cachedInput.accessor}, lockRootAttrPath);