Skip to content

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

Merged
edolstra merged 3 commits into2.26-maintenancefrom
mergify/bp/2.26-maintenance/pr-12386
Feb 6, 2025
Merged

Git fetcher: Don't create refs when fetching by revision (backport #12386)#12429
edolstra merged 3 commits into2.26-maintenancefrom
mergify/bp/2.26-maintenance/pr-12386

Conversation

@mergify
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