Merge pull request #10107 from tweag/repl-file-argument

Properly fail on flakerefs that don't point to a directory
This commit is contained in:
Robert Hensing 2024-03-07 10:04:35 +01:00 committed by GitHub
commit 73cf23275e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 4 deletions

View file

@ -102,6 +102,19 @@ std::pair<FlakeRef, std::string> parsePathFlakeRefWithFragment(
if (isFlake) { if (isFlake) {
if (!S_ISDIR(lstat(path).st_mode)) {
if (baseNameOf(path) == "flake.nix") {
// Be gentle with people who accidentally write `/foo/bar/flake.nix` instead of `/foo/bar`
warn(
"Path '%s' should point at the directory containing the 'flake.nix' file, not the file itself. "
"Pretending that you meant '%s'"
, path, dirOf(path));
path = dirOf(path);
} else {
throw BadURL("path '%s' is not a flake (because it's not a directory)", path);
}
}
if (!allowMissing && !pathExists(path + "/flake.nix")){ if (!allowMissing && !pathExists(path + "/flake.nix")){
notice("path '%s' does not contain a 'flake.nix', searching up",path); notice("path '%s' does not contain a 'flake.nix', searching up",path);
@ -124,9 +137,6 @@ std::pair<FlakeRef, std::string> parsePathFlakeRefWithFragment(
throw BadURL("could not find a flake.nix file"); throw BadURL("could not find a flake.nix file");
} }
if (!S_ISDIR(lstat(path).st_mode))
throw BadURL("path '%s' is not a flake (because it's not a directory)", path);
if (!allowMissing && !pathExists(path + "/flake.nix")) if (!allowMissing && !pathExists(path + "/flake.nix"))
throw BadURL("path '%s' is not a flake (because it doesn't contain a 'flake.nix' file)", path); throw BadURL("path '%s' is not a flake (because it doesn't contain a 'flake.nix' file)", path);

View file

@ -22,7 +22,7 @@ mkdir subdir
pushd subdir pushd subdir
success=("" . .# .#test ../subdir ../subdir#test "$PWD") success=("" . .# .#test ../subdir ../subdir#test "$PWD")
failure=("path:$PWD") failure=("path:$PWD" "../simple.nix")
for i in "${success[@]}"; do for i in "${success[@]}"; do
nix build $i || fail "flake should be found by searching up directories" nix build $i || fail "flake should be found by searching up directories"