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) #12428

Closed

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)

# Conflicts:
#	src/libfetchers/git.cc
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)

# Conflicts:
#	src/libfetchers/git.cc
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) conflicts merge-queue labels Feb 6, 2025
Copy link
Contributor Author

mergify bot commented Feb 6, 2025

Cherry-pick of 9f72d5b has failed:

On branch mergify/bp/2.25-maintenance/pr-12386
Your branch is up to date with 'origin/2.25-maintenance'.

You are currently cherry-picking commit 9f72d5bce.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   src/libfetchers/git.cc

no changes added to commit (use "git add" and/or "git commit -a")

Cherry-pick of ee9fa0d has failed:

On branch mergify/bp/2.25-maintenance/pr-12386
Your branch is ahead of 'origin/2.25-maintenance' by 1 commit.
  (use "git push" to publish your local commits)

You are currently cherry-picking commit ee9fa0d36.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   src/libfetchers/git.cc

no changes added to commit (use "git add" and/or "git commit -a")

To fix up this pull request, you can check it out locally. See documentation: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally

@github-actions github-actions bot added the fetching Networking with the outside (non-Nix) world, input locking label Feb 6, 2025
@edolstra
Copy link
Member

edolstra commented Feb 6, 2025

Closing as not applicable.

@edolstra edolstra closed this Feb 6, 2025
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) conflicts 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