Eliminate duplicate fetching of the top-level flake

This commit is contained in:
Eelco Dolstra 2019-06-04 21:10:53 +02:00
parent 087530dec4
commit ce225615c3
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -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)) {