Skip to content

Commit ee9fa0d

Browse files
committed
Git fetcher: Don't use refspec <rev>:<rev>
This causes Git to create a local ref named refs/head/<rev>, e.g. $ git -C ~/.cache/nix/gitv3/11irpim06vj4h6c0w8yls6kx4hvl0qd0gr1fvk47n76g6wf1s1vk ls-remote --symref . 5c4410e3b9891c05ab40d723de78c6f0be45ad30 refs/heads/5c4410e3b9891c05ab40d723de78c6f0be45ad30 7f6bde8a20de4cccc2256f088bc5af9dbe38881d refs/heads/7f6bde8a20de4cccc2256f088bc5af9dbe38881d which confuses readHead(), leading to errors like fatal: Refusing to point HEAD outside of refs/ warning: could not update cached head 'd275d93aa0bb8a004939b2f1e87f559f989453be' for 'file:///tmp/repo'
1 parent 9f72d5b commit ee9fa0d

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/libfetchers/git.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -611,16 +611,16 @@ struct GitInputScheme : InputScheme
611611
try {
612612
auto fetchRef =
613613
getAllRefsAttr(input)
614-
? "refs/*"
614+
? "refs/*:refs/*"
615615
: input.getRev()
616616
? input.getRev()->gitRev()
617617
: ref.compare(0, 5, "refs/") == 0
618-
? ref
618+
? fmt("%1%:%1%", ref)
619619
: ref == "HEAD"
620620
? ref
621-
: "refs/heads/" + ref;
621+
: fmt("%1%:%1%", "refs/heads/" + ref);
622622

623-
repo->fetch(repoUrl.to_string(), fmt("%s:%s", fetchRef, fetchRef), getShallowAttr(input));
623+
repo->fetch(repoUrl.to_string(), fetchRef, getShallowAttr(input));
624624
} catch (Error & e) {
625625
if (!std::filesystem::exists(localRefFile)) throw;
626626
logError(e.info());

0 commit comments

Comments
 (0)