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 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 node, const InputPath & inputPathPrefix, std::shared_ptr 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, const InputPath & inputPathPrefix, std::shared_ptr 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 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);