aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/flake/flake.cc27
-rw-r--r--src/libexpr/flake/flake.hh9
-rw-r--r--src/libfetchers/path.cc8
3 files changed, 19 insertions, 25 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index a380ae27f..9e00ff188 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -325,12 +325,23 @@ LockedFlake lockFlake(
std::vector<FlakeRef> parents;
+ struct LockParent {
+ /* The path to this parent. */
+ InputPath path;
+
+ /* Whether we are currently inside a top-level lockfile
+ (inputs absolute) or subordinate lockfile (inputs
+ relative). */
+ bool absolute;
+ };
+
std::function<void(
const FlakeInputs & flakeInputs,
std::shared_ptr<Node> node,
const InputPath & inputPathPrefix,
std::shared_ptr<const Node> oldNode,
- const LockParent parent, const Path parentPath)>
+ const LockParent & parent,
+ const Path & parentPath)>
computeLocks;
computeLocks = [&](
@@ -338,7 +349,8 @@ LockedFlake lockFlake(
std::shared_ptr<Node> node,
const InputPath & inputPathPrefix,
std::shared_ptr<const Node> oldNode,
- const LockParent parent, const Path parentPath)
+ const LockParent & parent,
+ const Path & parentPath)
{
debug("computing lock file node '%s'", printInputPath(inputPathPrefix));
@@ -384,15 +396,11 @@ LockedFlake lockFlake(
if (parent.absolute && !hasOverride) {
target = *input.follows;
} else {
- if (hasOverride)
- {
+ if (hasOverride) {
target = inputPathPrefix;
target.pop_back();
- }
- else
- {
+ } else
target = parent.path;
- }
for (auto & i : *input.follows) target.push_back(i);
}
@@ -480,8 +488,7 @@ LockedFlake lockFlake(
// If this input is a path, recurse it down.
// This allows us to resolve path inputs relative to the current flake.
- if (localRef.input.getType() == "path")
- {
+ if (localRef.input.getType() == "path") {
localRef.input.parent = parentPath;
localPath = canonPath(parentPath + "/" + *input.ref->input.getSourcePath());
}
diff --git a/src/libexpr/flake/flake.hh b/src/libexpr/flake/flake.hh
index 937cc021b..d46da9d68 100644
--- a/src/libexpr/flake/flake.hh
+++ b/src/libexpr/flake/flake.hh
@@ -124,15 +124,6 @@ struct LockFlags
std::set<InputPath> inputUpdates;
};
-struct LockParent {
- /* The path to this parent */
- InputPath path;
-
- /* Whether we are currently inside a top-level lockfile (inputs absolute)
- or subordinate lockfile (inputs relative) */
- bool absolute;
-};
-
LockedFlake lockFlake(
EvalState & state,
const FlakeRef & flakeRef,
diff --git a/src/libfetchers/path.cc b/src/libfetchers/path.cc
index c4977834d..b6fcdac9e 100644
--- a/src/libfetchers/path.cc
+++ b/src/libfetchers/path.cc
@@ -85,8 +85,7 @@ struct PathInputScheme : InputScheme
std::string absPath;
auto path = getStrAttr(input.attrs, "path");
- if (path[0] != '/' && input.parent)
- {
+ if (path[0] != '/' && input.parent) {
auto parent = canonPath(*input.parent);
// the path isn't relative, prefix it
@@ -95,11 +94,8 @@ struct PathInputScheme : InputScheme
// for security, ensure that if the parent is a store path, it's inside it
if (!parent.rfind(store->storeDir, 0) && absPath.rfind(store->storeDir, 0))
throw BadStorePath("relative path '%s' points outside of its parent's store path %s, this is a security violation", path, parent);
- }
- else
- {
+ } else
absPath = path;
- }
// FIXME: check whether access to 'path' is allowed.
auto storePath = store->maybeParseStorePath(absPath);