Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Git fetcher: Don't create refs when fetching by revision (backport #12386) #12429

Merged
merged 3 commits into from
Feb 6, 2025

Conversation

mergify[bot]
Copy link
Contributor

@mergify mergify bot commented Feb 6, 2025

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 doing git 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 references HEAD, otherwise a line like

    5c4410e3b9891c05ab40d723de78c6f0be45ad30        refs/heads/5c4410e3b9891c05ab40d723de78c6f0be45ad30
    

    will cause 5c44... (created by the previous bug) to be interpreted as a ref, leading to errors like

    fatal: Refusing to point HEAD outside of refs/
    warning: could not update cached head 'd275d93aa0bb8a004939b2f1e87f559f989453be' for 'file:///tmp/repo'
    
  • Don't pass URL query parameters for file:// URLs. 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.

Context


Add 👍 to pull requests you find important.

The Nix maintainer team uses a GitHub project board to schedule and track reviews.


This is an automatic backport of pull request #12386 done by [Mergify](https://mergify.com).

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.

(cherry picked from commit 9f72d5b)
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'

(cherry picked from commit ee9fa0d)
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'

(cherry picked from commit c8b2264)
@mergify mergify bot requested a review from edolstra as a code owner February 6, 2025 14:05
@mergify mergify bot added automatic backport This PR is a backport produced by automation (does not trigger backporting) merge-queue labels Feb 6, 2025
@github-actions github-actions bot added the fetching Networking with the outside (non-Nix) world, input locking label Feb 6, 2025
@edolstra edolstra enabled auto-merge February 6, 2025 14:09
@edolstra edolstra merged commit 31bdb2a into 2.26-maintenance Feb 6, 2025
21 checks passed
@edolstra edolstra deleted the mergify/bp/2.26-maintenance/pr-12386 branch February 6, 2025 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automatic backport This PR is a backport produced by automation (does not trigger backporting) fetching Networking with the outside (non-Nix) world, input locking merge-queue
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant