mirror of
https://github.com/NixOS/nix
synced 2025-07-07 18:31:49 +02:00
Merge pull request #12266 from NixOS/mergify/bp/2.25-maintenance/pr-12107
fetchers/git: make relative path absolute for local repo (backport #12107)
This commit is contained in:
commit
98506a5ef1
3 changed files with 37 additions and 1 deletions
|
@ -425,7 +425,16 @@ struct GitInputScheme : InputScheme
|
||||||
auto url = parseURL(getStrAttr(input.attrs, "url"));
|
auto url = parseURL(getStrAttr(input.attrs, "url"));
|
||||||
bool isBareRepository = url.scheme == "file" && !pathExists(url.path + "/.git");
|
bool isBareRepository = url.scheme == "file" && !pathExists(url.path + "/.git");
|
||||||
repoInfo.isLocal = url.scheme == "file" && !forceHttp && !isBareRepository;
|
repoInfo.isLocal = url.scheme == "file" && !forceHttp && !isBareRepository;
|
||||||
repoInfo.url = repoInfo.isLocal ? url.path : url.to_string();
|
//
|
||||||
|
// FIXME: here we turn a possibly relative path into an absolute path.
|
||||||
|
// This allows relative git flake inputs to be resolved against the
|
||||||
|
// **current working directory** (as in POSIX), which tends to work out
|
||||||
|
// ok in the context of flakes, but is the wrong behavior,
|
||||||
|
// as it should resolve against the flake.nix base directory instead.
|
||||||
|
//
|
||||||
|
// See: https://discourse.nixos.org/t/57783 and #9708
|
||||||
|
//
|
||||||
|
repoInfo.url = repoInfo.isLocal ? std::filesystem::absolute(url.path).string() : url.to_string();
|
||||||
|
|
||||||
// If this is a local directory and no ref or revision is
|
// If this is a local directory and no ref or revision is
|
||||||
// given, then allow the use of an unclean working tree.
|
// given, then allow the use of an unclean working tree.
|
||||||
|
|
|
@ -76,3 +76,21 @@ git -C "$rootRepo" commit -m "Add flake.nix"
|
||||||
|
|
||||||
storePath=$(nix flake metadata --json "$rootRepo?submodules=1" | jq -r .path)
|
storePath=$(nix flake metadata --json "$rootRepo?submodules=1" | jq -r .path)
|
||||||
[[ -e "$storePath/submodule" ]]
|
[[ -e "$storePath/submodule" ]]
|
||||||
|
|
||||||
|
# The root repo may use the submodule repo as an input
|
||||||
|
# through the relative path. This may change in the future;
|
||||||
|
# see: https://discourse.nixos.org/t/57783 and #9708.
|
||||||
|
cat > "$rootRepo"/flake.nix <<EOF
|
||||||
|
{
|
||||||
|
inputs.subRepo.url = "git+file:./submodule";
|
||||||
|
outputs = { ... }: { };
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
git -C "$rootRepo" add flake.nix
|
||||||
|
git -C "$rootRepo" commit -m "Add subRepo input"
|
||||||
|
(
|
||||||
|
cd "$rootRepo"
|
||||||
|
# The submodule must be locked to the relative path,
|
||||||
|
# _not_ the absolute path:
|
||||||
|
[[ $(nix flake metadata --json | jq -r .locks.nodes.subRepo.locked.url) = "file:./submodule" ]]
|
||||||
|
)
|
||||||
|
|
|
@ -231,6 +231,15 @@ nix build -o "$TEST_ROOT/result" "git+file://$flake1Dir#default"
|
||||||
nix build -o "$TEST_ROOT/result" "$flake1Dir?ref=HEAD#default"
|
nix build -o "$TEST_ROOT/result" "$flake1Dir?ref=HEAD#default"
|
||||||
nix build -o "$TEST_ROOT/result" "git+file://$flake1Dir?ref=HEAD#default"
|
nix build -o "$TEST_ROOT/result" "git+file://$flake1Dir?ref=HEAD#default"
|
||||||
|
|
||||||
|
# Check that relative paths are allowed for git flakes.
|
||||||
|
# This may change in the future once git submodule support is refined.
|
||||||
|
# See: https://discourse.nixos.org/t/57783 and #9708.
|
||||||
|
(
|
||||||
|
# This `cd` should not be required and is indicative of aforementioned bug.
|
||||||
|
cd "$flake1Dir/.."
|
||||||
|
nix build -o "$TEST_ROOT/result" "git+file:./$(basename "$flake1Dir")"
|
||||||
|
)
|
||||||
|
|
||||||
# Check that store symlinks inside a flake are not interpreted as flakes.
|
# Check that store symlinks inside a flake are not interpreted as flakes.
|
||||||
nix build -o "$flake1Dir/result" "git+file://$flake1Dir"
|
nix build -o "$flake1Dir/result" "git+file://$flake1Dir"
|
||||||
nix path-info "$flake1Dir/result"
|
nix path-info "$flake1Dir/result"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue