aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-06-04 21:10:53 +0200
committerEelco Dolstra <edolstra@gmail.com>2019-06-04 21:10:53 +0200
commitce225615c3ee08b7b63a8488dbf74ff2598d8d74 (patch)
tree61791495b4238e61e009964c347cd764e490fdc1
parent087530dec40bd5ab23fe2da83fca517bb91d2282 (diff)
Eliminate duplicate fetching of the top-level flake
-rw-r--r--src/libexpr/primops/flake.cc11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/libexpr/primops/flake.cc b/src/libexpr/primops/flake.cc
index 000a43764..734f650f2 100644
--- a/src/libexpr/primops/flake.cc
+++ b/src/libexpr/primops/flake.cc
@@ -325,13 +325,11 @@ bool allowedToUseRegistries(HandleLockFile handle, bool isTopRef)
not in the lockfile yet. */
static std::pair<Flake, FlakeInput> updateLocks(
EvalState & state,
- const FlakeRef & flakeRef,
+ const Flake & flake,
HandleLockFile handleLockFile,
const FlakeInputs & oldEntry,
bool topRef)
{
- auto flake = getFlake(state, flakeRef, allowedToUseRegistries(handleLockFile, topRef));
-
FlakeInput newEntry(
flake.id,
flake.sourceInfo.resolvedRef,
@@ -362,7 +360,9 @@ static std::pair<Flake, FlakeInput> updateLocks(
if (handleLockFile == AllPure || handleLockFile == TopRefUsesRegistries)
throw Error("cannot update flake dependency '%s' in pure mode", inputRef);
newEntry.flakeInputs.insert_or_assign(inputRef,
- updateLocks(state, inputRef, handleLockFile, {}, false).second);
+ updateLocks(state,
+ getFlake(state, inputRef, allowedToUseRegistries(handleLockFile, false)),
+ handleLockFile, {}, false).second);
}
}
@@ -385,9 +385,8 @@ ResolvedFlake resolveFlake(EvalState & state, const FlakeRef & topRef, HandleLoc
+ "/" + flake.sourceInfo.resolvedRef.subdir + "/flake.lock");
}
- // FIXME: get rid of duplicate getFlake call
LockFile lockFile(updateLocks(
- state, topRef, handleLockFile, oldLockFile, true).second);
+ state, flake, handleLockFile, oldLockFile, true).second);
if (!(lockFile == oldLockFile)) {
if (allowedToWrite(handleLockFile)) {