Git fetcher: Don't create refs when fetching by revision#12386
Merged
Ericson2314 merged 3 commits intoNixOS:masterfrom Feb 5, 2025
Merged
Git fetcher: Don't create refs when fetching by revision#12386Ericson2314 merged 3 commits intoNixOS:masterfrom
Ericson2314 merged 3 commits intoNixOS:masterfrom
Conversation
Git interprets them as part of the file name, so passing parameters like 'rev' breaks. Only relevant for testing (when _NIX_FORCE_HTTP is set) and local bare repos.
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'
If we previously fetched by revision, the output of "git ls-remote" won't start with the expected line like ref: refs/heads/master HEAD but will be something like 5c4410e3b9891c05ab40d723de78c6f0be45ad30 refs/heads/5c4410e3b9891c05ab40d723de78c6f0be45ad30 This then causes Nix to treat that revision as a refname, which then leads to warnings like warning: could not update cached head '5c4410e3b9891c05ab40d723de78c6f0be45ad30' for 'file:///tmp/repo'
|
This pull request has been mentioned on NixOS Discourse. There might be relevant details there: |
Ericson2314
approved these changes
Feb 5, 2025
edolstra
added a commit
that referenced
this pull request
Feb 6, 2025
…2386 Git fetcher: Don't create refs when fetching by revision (backport #12386)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
This fixes a couple of issues with the Git fetcher:
When fetching by revision, don't create a ref named
refs/head/<revision>. (This was caused by doinggit fetch <revision>:<revision>.) This is unnecessary and triggers the next bug.When parsing the output of
git ls-remote --symref, make sure that the first line referencesHEAD, otherwise a line likewill cause
5c44...(created by the previous bug) to be interpreted as a ref, leading to errors likefile://URLs. Git interprets them as part of the file name, so passing parameters likerevbreaks. Only relevant for testing (when_NIX_FORCE_HTTPis set) and local bare repos.Context
Add 👍 to pull requests you find important.
The Nix maintainer team uses a GitHub project board to schedule and track reviews.