From: Kyle Meyer <kyle@kyleam.com>
To: Ricardo Wurmus <rekado@elephly.net>
Cc: 45187@debbugs.gnu.org
Subject: bug#45187: git download defaults to origin/master
Date: Fri, 11 Dec 2020 23:02:02 GMT [thread overview]
Message-ID: <87v9d8dk0r.fsf@kyleam.com> (raw)
In-Reply-To: <878sa4vyxb.fsf@elephly.net>
Ricardo Wurmus writes:
> Importing https://github.com/immunogenomics/scpost with the CRAN
> importer fails, because the git repository does not have an
> origin/master branch. This repository only has a “main” branch.
>
> Arguably, this shouldn’t matter, but (guix git) has the “master” name
> set up as the default. When cloning a repository it may be better to
> fetch everything and select the default branch — whichever name it may
> have.
One option may be to use the remote HEAD symref. That's probably the
best indicator of what the primary branch is. In a clone, it doesn't
necessarily match HEAD on the remote, because users may change it to
another branch they're interested in, but that isn't really relevant to
these behind-the-scenes checkouts.
Here's a quick and dirty demo that makes your reproducer work. A real
patch in this direction would of course look very different.
diff --git a/guix/git.scm b/guix/git.scm
index ca77b9f54b..7320c0d6c8 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -207,6 +207,9 @@ (define (resolve-reference repository ref)
(let ((oid (reference-target
(branch-lookup repository branch BRANCH-REMOTE))))
(object-lookup repository oid)))
+ (('symref . symref)
+ (let ((oid (reference-name->oid repository symref)))
+ (object-lookup repository oid)))
(('commit . commit)
(let ((len (string-length commit)))
;; 'object-lookup-prefix' appeared in Guile-Git in Mar. 2018, so we
@@ -320,7 +323,7 @@ (define (reference-available? repository ref)
(define* (update-cached-checkout url
#:key
- (ref '(branch . "master"))
+ (ref '(symref . "refs/remotes/origin/HEAD"))
recursive?
(check-out? #t)
starting-commit
@@ -395,7 +398,7 @@ (define* (latest-repository-commit store url
(log-port (%make-void-port "w"))
(cache-directory
(%repository-cache-directory))
- (ref '(branch . "master")))
+ (ref '(symref . "refs/remotes/origin/HEAD")))
"Return two values: the content of the git repository at URL copied into a
store directory and the sha1 of the top level commit in this directory. The
reference to be checkout, once the repository is fetched, is specified by REF.
next prev parent reply other threads:[~2020-12-11 23:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-11 21:02 bug#45187: git download defaults to origin/master Ricardo Wurmus
2020-12-11 23:02 ` Kyle Meyer [this message]
2020-12-13 21:52 ` Marius Bakke
2020-12-14 4:49 ` Kyle Meyer
2020-12-14 10:27 ` Ludovic Courtès
2020-12-14 10:28 ` Ludovic Courtès
2020-12-15 6:07 ` Kyle Meyer
2021-04-08 16:21 ` Ricardo Wurmus
2021-04-09 5:10 ` bug#45187: [PATCH] git: Update cached checkout to the remote HEAD by default Kyle Meyer
2021-04-09 13:50 ` bug#45187: git download defaults to origin/master Ludovic Courtès
2021-04-10 3:50 ` Kyle Meyer
2021-04-10 5:51 ` Kyle Meyer
2021-04-10 19:33 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v9d8dk0r.fsf@kyleam.com \
--to=kyle@kyleam.com \
--cc=45187@debbugs.gnu.org \
--cc=rekado@elephly.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.