diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc index 792e205dc..e26a838c2 100644 --- a/src/libexpr/flake/flake.cc +++ b/src/libexpr/flake/flake.cc @@ -203,6 +203,7 @@ static Flake readFlake( EvalState & state, const FlakeRef & originalRef, const FlakeRef & resolvedRef, + const FlakeRef & lockedRef, InputAccessor & accessor, const InputPath & lockRootPath) { @@ -220,7 +221,7 @@ static Flake readFlake( Flake flake { .originalRef = originalRef, .resolvedRef = resolvedRef, - .lockedRef = resolvedRef, // FIXME + .lockedRef = lockedRef, .path = flakePath, }; @@ -319,9 +320,9 @@ static Flake getFlake( resolvedRef = originalRef.resolve(state.store); } - auto [accessor, input] = resolvedRef.input.lazyFetch(state.store); + auto [accessor, lockedRef] = resolvedRef.lazyFetch(state.store); - return readFlake(state, originalRef, resolvedRef, state.registerAccessor(accessor), lockRootPath); + return readFlake(state, originalRef, resolvedRef, lockedRef, state.registerAccessor(accessor), lockRootPath); } Flake getFlake(EvalState & state, const FlakeRef & originalRef, bool allowLookup, FlakeCache & flakeCache) diff --git a/src/libexpr/flake/flakeref.cc b/src/libexpr/flake/flakeref.cc index eede493f8..162656087 100644 --- a/src/libexpr/flake/flakeref.cc +++ b/src/libexpr/flake/flakeref.cc @@ -238,6 +238,12 @@ std::pair FlakeRef::fetchTree(ref store) const return {std::move(tree), FlakeRef(std::move(lockedInput), subdir)}; } +std::pair, FlakeRef> FlakeRef::lazyFetch(ref store) const +{ + auto [accessor, lockedInput] = input.lazyFetch(store); + return {accessor, FlakeRef(std::move(lockedInput), subdir)}; +} + std::tuple parseFlakeRefWithFragmentAndOutputsSpec( const std::string & url, const std::optional & baseDir, diff --git a/src/libexpr/flake/flakeref.hh b/src/libexpr/flake/flakeref.hh index abc49ed70..bdf93b251 100644 --- a/src/libexpr/flake/flakeref.hh +++ b/src/libexpr/flake/flakeref.hh @@ -58,6 +58,8 @@ struct FlakeRef static FlakeRef fromAttrs(const fetchers::Attrs & attrs); std::pair fetchTree(ref store) const; + + std::pair, FlakeRef> lazyFetch(ref store) const; }; std::ostream & operator << (std::ostream & str, const FlakeRef & flakeRef);