From 5a1514adb8dcec78c03f949868ae35215b9d62f9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 9 Mar 2020 15:27:49 +0100 Subject: [PATCH] Add 'flake' attribute to lock files to denote non-flakes --- src/libexpr/flake/flake.cc | 2 +- src/libexpr/flake/lockfile.cc | 2 ++ src/libexpr/flake/lockfile.hh | 12 +++++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc index a30637262..4fa125f1b 100644 --- a/src/libexpr/flake/flake.cc +++ b/src/libexpr/flake/flake.cc @@ -530,7 +530,7 @@ LockedFlake lockFlake( auto [sourceInfo, lockedRef] = fetchOrSubstituteTree( state, input.ref, {}, lockFlags.useRegistries, flakeCache); newLocks.inputs.insert_or_assign(id, - LockedInput(lockedRef, input.ref, sourceInfo.info)); + LockedInput(lockedRef, input.ref, sourceInfo.info, false)); } } } diff --git a/src/libexpr/flake/lockfile.cc b/src/libexpr/flake/lockfile.cc index bf55b4e3b..0a1795a16 100644 --- a/src/libexpr/flake/lockfile.cc +++ b/src/libexpr/flake/lockfile.cc @@ -72,6 +72,7 @@ LockedInput::LockedInput(const nlohmann::json & json) , lockedRef(getFlakeRef(json, "url", "uri", "locked")) , originalRef(getFlakeRef(json, "originalUrl", "originalUri", "original")) , info(parseTreeInfo(json)) + , isFlake(json.find("flake") != json.end() ? (bool) json["flake"] : true) { if (!lockedRef.input->isImmutable()) throw Error("lockfile contains mutable flakeref '%s'", lockedRef); @@ -95,6 +96,7 @@ nlohmann::json LockedInput::toJson() const json["original"] = fetchers::attrsToJson(originalRef.toAttrs()); json["locked"] = fetchers::attrsToJson(lockedRef.toAttrs()); json["info"] = treeInfoToJson(info); + if (!isFlake) json["flake"] = false; return json; } diff --git a/src/libexpr/flake/lockfile.hh b/src/libexpr/flake/lockfile.hh index 6203c40cb..51649df3d 100644 --- a/src/libexpr/flake/lockfile.hh +++ b/src/libexpr/flake/lockfile.hh @@ -39,9 +39,14 @@ struct LockedInput : LockedInputs { FlakeRef lockedRef, originalRef; TreeInfo info; + bool isFlake = true; - LockedInput(const FlakeRef & lockedRef, const FlakeRef & originalRef, const TreeInfo & info) - : lockedRef(lockedRef), originalRef(originalRef), info(info) + LockedInput( + const FlakeRef & lockedRef, + const FlakeRef & originalRef, + const TreeInfo & info, + bool isFlake = true) + : lockedRef(lockedRef), originalRef(originalRef), info(info), isFlake(isFlake) { } LockedInput(const nlohmann::json & json); @@ -52,7 +57,8 @@ struct LockedInput : LockedInputs lockedRef == other.lockedRef && originalRef == other.originalRef && info == other.info - && inputs == other.inputs; + && inputs == other.inputs + && isFlake == other.isFlake; } nlohmann::json toJson() const;