1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-24 13:51:16 +02:00

flakes: for detected git repository now assume shallow clones by default

Shallow clones are faster to access because we don't have to compute the
revCount, which in sparse checkouts might not even exists.

This is especially useful in combination with lazy trees in mind on large
repository such as nixpkgs.
This commit is contained in:
Jörg Thalheim 2025-05-26 09:27:49 +02:00
parent ed3e2a71ea
commit 09a7ce962d
2 changed files with 9 additions and 2 deletions

View file

@ -168,8 +168,10 @@ std::pair<FlakeRef, std::string> parsePathFlakeRefWithFragment(
parsedURL.query.insert_or_assign("dir", subdir);
}
if (pathExists(flakeRoot + "/.git/shallow"))
parsedURL.query.insert_or_assign("shallow", "1");
if (!parsedURL.query.count("shallow")) {
// We assume shallow by default, so we don't need to compute the revCount, which is an expensive operation.
parsedURL.query.insert_or_assign("shallow", "1");
}
return fromParsedURL(fetchSettings, std::move(parsedURL), isFlake);
}

View file

@ -65,3 +65,8 @@ fi
# Verify that we can shallow fetch the worktree
git -C "$TEST_ROOT/shallow-worktree" rev-list --count HEAD >/dev/null
nix eval --impure --raw --expr "(builtins.fetchGit { url = \"file://$TEST_ROOT/shallow-worktree\"; shallow = true; }).rev"
# Normal flake operation work because they use shallow by default
pushd "$TEST_ROOT/shallow-worktree"
nix flake metadata
popd