aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/flake/flake.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-10-21 14:57:01 +0200
committerEelco Dolstra <edolstra@gmail.com>2019-10-21 14:57:01 +0200
commita07da2fd7a889c225847556c0d4bf88384995274 (patch)
tree51c6836d16f5819d5131ed0fe6d2146d77cb4764 /src/libexpr/flake/flake.cc
parent4a1cd104952ed95c6f3fc9329de3cfd7c65a8931 (diff)
Don't ignore revs/refs of local flakerefs
Fixes error: the content hash of flake '/home/eelco/Dev/nixpkgs-flake?ref=HEAD&rev=0000000000000000000000000000000000000000' doesn't match the hash recorded in the referring lockfile
Diffstat (limited to 'src/libexpr/flake/flake.cc')
-rw-r--r--src/libexpr/flake/flake.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index d03227f69..73ca59452 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -181,7 +181,7 @@ static SourceInfo fetchInput(EvalState & state, const FlakeRef & resolvedRef)
else if (auto refData = std::get_if<FlakeRef::IsPath>(&resolvedRef.data)) {
if (!pathExists(refData->path + "/.git"))
throw Error("flake '%s' does not reference a Git repository", refData->path);
- return doGit(exportGit(state.store, refData->path, {}, {}, "source"));
+ return doGit(exportGit(state.store, refData->path, resolvedRef.ref, resolvedRef.rev, "source"));
}
else abort();
@@ -448,11 +448,15 @@ ResolvedFlake resolveFlake(EvalState & state, const FlakeRef & topRef, HandleLoc
+ "/" + flake.sourceInfo.resolvedRef.subdir + "/flake.lock");
}
+ debug("old lock file: %s", oldLockFile);
+
RefMap refMap;
LockFile lockFile(updateLocks(
refMap, "", state, flake, handleLockFile, oldLockFile, true).second);
+ debug("new lock file: %s", lockFile);
+
if (!(lockFile == oldLockFile)) {
if (allowedToWrite(handleLockFile)) {
if (auto refData = std::get_if<FlakeRef::IsPath>(&topRef.data)) {
@@ -524,7 +528,8 @@ static void prim_callFlake(EvalState & state, const Pos & pos, Value * * args, V
auto flake = getFlake(state, lazyInput->lockedInput.ref, false);
if (flake.sourceInfo.narHash != lazyInput->lockedInput.narHash)
- throw Error("the content hash of flake '%s' doesn't match the hash recorded in the referring lockfile", flake.sourceInfo.resolvedRef);
+ throw Error("the content hash of flake '%s' doesn't match the hash recorded in the referring lockfile",
+ lazyInput->lockedInput.ref);
callFlake(state, flake, lazyInput->lockedInput, v);
} else {
@@ -532,7 +537,8 @@ static void prim_callFlake(EvalState & state, const Pos & pos, Value * * args, V
auto sourceInfo = getNonFlake(state, lazyInput->lockedInput.ref, false, refMap);
if (sourceInfo.narHash != lazyInput->lockedInput.narHash)
- throw Error("the content hash of repository '%s' doesn't match the hash recorded in the referring lockfile", sourceInfo.resolvedRef);
+ throw Error("the content hash of repository '%s' doesn't match the hash recorded in the referring lockfile",
+ lazyInput->lockedInput.ref);
state.mkAttrs(v, 8);