diff --git a/src/libflake/flakeref.cc b/src/libflake/flakeref.cc index d56f2858f..c9e9a70ef 100644 --- a/src/libflake/flakeref.cc +++ b/src/libflake/flakeref.cc @@ -168,8 +168,10 @@ std::pair 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); } diff --git a/tests/functional/fetchGitShallow.sh b/tests/functional/fetchGitShallow.sh index cf7e5fd4f..7a937d9d1 100644 --- a/tests/functional/fetchGitShallow.sh +++ b/tests/functional/fetchGitShallow.sh @@ -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