aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-02-19 14:11:18 +0100
committerGitHub <noreply@github.com>2020-02-19 14:11:18 +0100
commit1d99c4ab25cfedd3d634c447035584d9c390d0e9 (patch)
treef7ae812e8288e88231fad7e5cdad31856ed90731
parentf3505a78991458e8cc447d9bde0be5ff1aa39335 (diff)
parentc169ea59049f861aaba429f48b828d0820b74d1d (diff)
Merge pull request #3229 from Ma27/flakes-fetchgit-worktree-support
builtins.fetchGit: Fix build when fetching a git worktree
-rw-r--r--src/libstore/fetchers/git.cc11
-rw-r--r--tests/fetchGit.sh8
2 files changed, 18 insertions, 1 deletions
diff --git a/src/libstore/fetchers/git.cc b/src/libstore/fetchers/git.cc
index 134d44ecd..9276b0993 100644
--- a/src/libstore/fetchers/git.cc
+++ b/src/libstore/fetchers/git.cc
@@ -217,7 +217,16 @@ struct GitInput : Input
/* Check whether this repo has any commits. There are
probably better ways to do this. */
- bool haveCommits = !readDirectory(actualUrl + "/.git/refs/heads").empty();
+ auto gitDir = actualUrl + "/.git";
+ auto commonGitDir = chomp(runProgram(
+ "git",
+ true,
+ { "-C", actualUrl, "rev-parse", "--git-common-dir" }
+ ));
+ if (commonGitDir != ".git")
+ gitDir = commonGitDir;
+
+ bool haveCommits = !readDirectory(gitDir + "/refs/heads").empty();
try {
if (haveCommits) {
diff --git a/tests/fetchGit.sh b/tests/fetchGit.sh
index ac0d78f12..d44586977 100644
--- a/tests/fetchGit.sh
+++ b/tests/fetchGit.sh
@@ -25,8 +25,16 @@ rev1=$(git -C $repo rev-parse HEAD)
echo world > $repo/hello
git -C $repo commit -m 'Bla2' -a
+git -C $repo worktree add $TEST_ROOT/worktree
+echo hello >> $TEST_ROOT/worktree/hello
rev2=$(git -C $repo rev-parse HEAD)
+# Fetch a worktree
+unset _NIX_FORCE_HTTP
+path0=$(nix eval --impure --raw --expr "(builtins.fetchGit file://$TEST_ROOT/worktree).outPath")
+export _NIX_FORCE_HTTP=1
+[[ $(tail -n 1 $path0/hello) = "hello" ]]
+
# Fetch the default branch.
path=$(nix eval --impure --raw --expr "(builtins.fetchGit file://$repo).outPath")
[[ $(cat $path/hello) = world ]]