PosixSourceAccessor: Support roots that are not directories

We have to support this for `fetchTree { type = "file" }` (and
probably other types of trees that can have a non-directory at the
root, like NARs).
This commit is contained in:
Eelco Dolstra 2024-02-19 13:54:40 +01:00
parent b00f412f81
commit 930b9c8269
2 changed files with 6 additions and 0 deletions

View file

@ -30,6 +30,11 @@ std::filesystem::path PosixSourceAccessor::makeAbsPath(const CanonPath & path)
{ {
return root.empty() return root.empty()
? (std::filesystem::path { path.abs() }) ? (std::filesystem::path { path.abs() })
: path.isRoot()
? /* Don't append a slash for the root of the accessor, since
it can be a non-directory (e.g. in the case of `fetchTree
{ type = "file" }`). */
root
: root / path.rel(); : root / path.rel();
} }

View file

@ -14,6 +14,7 @@ test_fetch_file () {
tree = builtins.fetchTree { type = "file"; url = "file://$PWD/test_input"; }; tree = builtins.fetchTree { type = "file"; url = "file://$PWD/test_input"; };
in in
assert (tree.narHash == "$input_hash"); assert (tree.narHash == "$input_hash");
assert builtins.readFile tree == "foo\n";
tree tree
EOF EOF
} }