aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-04-06 14:56:13 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-04-06 14:56:13 +0200
commit68b43e01ddf990182c87a924d647dc7aa93b34f7 (patch)
tree4ca0b101c3f241aebe58f4fa4fa01dfd0eaeaee2 /src/libexpr
parentce3173edc15ad704c5083baba09b7bcdb99d5104 (diff)
nix flake info: Show resolved URL
This is useful for finding out what a registry lookup resolves to, e.g $ nix flake info patchelf Resolved URL: github:NixOS/patchelf Locked URL: github:NixOS/patchelf/cd7955af31698c571c30b7a0f78e59fd624d0229
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/flake/flake.cc10
-rw-r--r--src/libexpr/flake/flake.hh1
2 files changed, 7 insertions, 4 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index f23c53a82..86bb05b5d 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -46,7 +46,7 @@ static FlakeRef lookupInFlakeCache(
return flakeRef;
}
-static std::pair<fetchers::Tree, FlakeRef> fetchOrSubstituteTree(
+static std::tuple<fetchers::Tree, FlakeRef, FlakeRef> fetchOrSubstituteTree(
EvalState & state,
const FlakeRef & originalRef,
std::optional<TreeInfo> treeInfo,
@@ -76,6 +76,7 @@ static std::pair<fetchers::Tree, FlakeRef> fetchOrSubstituteTree(
.storePath = std::move(storePath),
.info = *treeInfo,
},
+ originalRef,
originalRef
};
} catch (Error & e) {
@@ -101,7 +102,7 @@ static std::pair<fetchers::Tree, FlakeRef> fetchOrSubstituteTree(
if (treeInfo)
assert(tree.storePath == treeInfo->computeStorePath(*state.store));
- return {std::move(tree), lockedRef};
+ return {std::move(tree), resolvedRef, lockedRef};
}
static void expectType(EvalState & state, ValueType type,
@@ -206,7 +207,7 @@ static Flake getFlake(
bool allowLookup,
FlakeCache & flakeCache)
{
- auto [sourceInfo, lockedRef] = fetchOrSubstituteTree(
+ auto [sourceInfo, resolvedRef, lockedRef] = fetchOrSubstituteTree(
state, originalRef, treeInfo, allowLookup, flakeCache);
// Guard against symlink attacks.
@@ -217,6 +218,7 @@ static Flake getFlake(
Flake flake {
.originalRef = originalRef,
+ .resolvedRef = resolvedRef,
.lockedRef = lockedRef,
.sourceInfo = std::make_shared<fetchers::Tree>(std::move(sourceInfo))
};
@@ -490,7 +492,7 @@ LockedFlake lockFlake(
}
else {
- auto [sourceInfo, lockedRef] = fetchOrSubstituteTree(
+ auto [sourceInfo, resolvedRef, lockedRef] = fetchOrSubstituteTree(
state, input.ref, {}, lockFlags.useRegistries, flakeCache);
node->inputs.insert_or_assign(id,
std::make_shared<LockedNode>(lockedRef, input.ref, sourceInfo.info, false));
diff --git a/src/libexpr/flake/flake.hh b/src/libexpr/flake/flake.hh
index 88e386be0..7ee9bbe76 100644
--- a/src/libexpr/flake/flake.hh
+++ b/src/libexpr/flake/flake.hh
@@ -28,6 +28,7 @@ struct FlakeInput
struct Flake
{
FlakeRef originalRef;
+ FlakeRef resolvedRef;
FlakeRef lockedRef;
std::optional<std::string> description;
std::shared_ptr<const fetchers::Tree> sourceInfo;