aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-05-28 14:01:08 +0200
committerEelco Dolstra <edolstra@gmail.com>2019-05-28 14:01:08 +0200
commitecee759b80a5a4cefbf15c3670f28bdebb58c404 (patch)
tree1e6f69f6d5f439863dedc6418e87c7e74676a382 /src/libexpr
parente7e7a03baf446bad34939c106aee4b69f5619fd0 (diff)
callFlake(): Emit source info attributes for non-flake dependencies
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/primops/flake.cc35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/libexpr/primops/flake.cc b/src/libexpr/primops/flake.cc
index 4de742862..162e5c915 100644
--- a/src/libexpr/primops/flake.cc
+++ b/src/libexpr/primops/flake.cc
@@ -514,6 +514,23 @@ void updateLockFile(EvalState & state, const FlakeRef & flakeRef, bool recreateL
resolveFlake(state, flakeRef, recreateLockFile ? RecreateLockFile : UpdateLockFile);
}
+static void emitSourceInfoAttrs(EvalState & state, const SourceInfo & sourceInfo, Value & vAttrs)
+{
+ auto & path = sourceInfo.storePath;
+ state.store->isValidPath(path);
+ mkString(*state.allocAttr(vAttrs, state.sOutPath), path, {path});
+
+ if (sourceInfo.resolvedRef.rev) {
+ mkString(*state.allocAttr(vAttrs, state.symbols.create("rev")),
+ sourceInfo.resolvedRef.rev->gitRev());
+ mkString(*state.allocAttr(vAttrs, state.symbols.create("shortRev")),
+ sourceInfo.resolvedRef.rev->gitShortRev());
+ }
+
+ if (sourceInfo.revCount)
+ mkInt(*state.allocAttr(vAttrs, state.symbols.create("revCount")), *sourceInfo.revCount);
+}
+
void callFlake(EvalState & state, const ResolvedFlake & resFlake, Value & v)
{
// Construct the resulting attrset '{description, provides,
@@ -529,30 +546,18 @@ void callFlake(EvalState & state, const ResolvedFlake & resFlake, Value & v)
for (const NonFlake nonFlake : resFlake.nonFlakeDeps) {
auto vNonFlake = state.allocAttr(v, nonFlake.alias);
- state.mkAttrs(*vNonFlake, 4);
+ state.mkAttrs(*vNonFlake, 8);
state.store->isValidPath(nonFlake.sourceInfo.storePath);
mkString(*state.allocAttr(*vNonFlake, state.sOutPath),
nonFlake.sourceInfo.storePath, {nonFlake.sourceInfo.storePath});
- // FIXME: add rev, shortRev, revCount, ...
+ emitSourceInfoAttrs(state, nonFlake.sourceInfo, *vNonFlake);
}
mkString(*state.allocAttr(v, state.sDescription), resFlake.flake.description);
- auto & path = resFlake.flake.sourceInfo.storePath;
- state.store->isValidPath(path);
- mkString(*state.allocAttr(v, state.sOutPath), path, {path});
-
- if (resFlake.flake.sourceInfo.resolvedRef.rev) {
- mkString(*state.allocAttr(v, state.symbols.create("rev")),
- resFlake.flake.sourceInfo.resolvedRef.rev->gitRev());
- mkString(*state.allocAttr(v, state.symbols.create("shortRev")),
- resFlake.flake.sourceInfo.resolvedRef.rev->gitShortRev());
- }
-
- if (resFlake.flake.sourceInfo.revCount)
- mkInt(*state.allocAttr(v, state.symbols.create("revCount")), *resFlake.flake.sourceInfo.revCount);
+ emitSourceInfoAttrs(state, resFlake.flake.sourceInfo, v);
auto vProvides = state.allocAttr(v, state.symbols.create("provides"));
mkApp(*vProvides, *resFlake.flake.vProvides, v);