lib.filesystem.resolveDefaultNix: init
This commit is contained in:
parent
9341a8b6a2
commit
ecc039f327
@ -454,4 +454,46 @@ in
|
|||||||
)
|
)
|
||||||
else
|
else
|
||||||
processDir args;
|
processDir args;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Append `/default.nix` if the passed path is a directory.
|
||||||
|
|
||||||
|
# Type
|
||||||
|
|
||||||
|
```
|
||||||
|
resolveDefaultNix :: (Path | String) -> (Path | String)
|
||||||
|
```
|
||||||
|
|
||||||
|
# Inputs
|
||||||
|
|
||||||
|
A single argument which can be a [path](https://nix.dev/manual/nix/stable/language/types#type-path) value or a string containing an absolute path.
|
||||||
|
|
||||||
|
# Output
|
||||||
|
|
||||||
|
If the input refers to a directory that exists, the output is that same path with `/default.nix` appended.
|
||||||
|
Furthermore, if the input is a string that ends with `/`, `default.nix` is appended to it.
|
||||||
|
Otherwise, the input is returned unchanged.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
:::{.example}
|
||||||
|
## `lib.filesystem.resolveDefaultNix` usage example
|
||||||
|
|
||||||
|
This expression checks whether `a` and `b` refer to the same locally available Nix file path.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
resolveDefaultNix a == resolveDefaultNix b
|
||||||
|
```
|
||||||
|
|
||||||
|
For instance, if `a` is `/some/dir` and `b` is `/some/dir/default.nix`, and `/some/dir/` exists, the expression evaluates to `true`, despite `a` and `b` being different references to the same Nix file.
|
||||||
|
*/
|
||||||
|
resolveDefaultNix =
|
||||||
|
v:
|
||||||
|
if pathIsDirectory v then
|
||||||
|
v + "/default.nix"
|
||||||
|
else if lib.isString v && hasSuffix "/" v then
|
||||||
|
# A path ending in `/` can only refer to a directory, so we take the hint, even if we can't verify the validity of the path's `/` assertion.
|
||||||
|
# A `/` is already present, so we don't add another one.
|
||||||
|
v + "default.nix"
|
||||||
|
else
|
||||||
|
v;
|
||||||
}
|
}
|
||||||
|
@ -4255,4 +4255,50 @@ runTests {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixFile1 = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix ./foo.nix;
|
||||||
|
expected = ./foo.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixFile2 = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix ./default.nix;
|
||||||
|
expected = ./default.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixDir1 = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix ./.;
|
||||||
|
expected = ./default.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixFile1_toString = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix (toString ./foo.nix);
|
||||||
|
expected = toString ./foo.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixFile2_toString = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix (toString ./default.nix);
|
||||||
|
expected = toString ./default.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixDir1_toString = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix (toString ./.);
|
||||||
|
expected = toString ./default.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixDir1_toString2 = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix (toString ./.);
|
||||||
|
expected = toString ./. + "/default.nix";
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixNonExistent = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs";
|
||||||
|
expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs";
|
||||||
|
};
|
||||||
|
|
||||||
|
testFilesystemResolveDefaultNixNonExistentDir = {
|
||||||
|
expr = lib.filesystem.resolveDefaultNix "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/";
|
||||||
|
expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/default.nix";
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user