git: Add support for symbolic references.

The #:refspecs argument was added in Guile-Git 0.10.0.

* guix/git.scm (update-cached-checkout): Define ‘symref-list’.  Pass it
as #:refspecs to ‘remote-fetch’.

Change-Id: Ib7874e2a30f97e51fdfdc2231a3bc5a3b45a177d
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Romain GARBAGE 2025-04-24 10:19:59 +02:00 committed by Ludovic Courtès
parent f3021149a8
commit 7e90241586
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -556,7 +556,7 @@ values: the cache directory name, and the SHA1 commit (a string) corresponding
to REF, and the relation of STARTING-COMMIT relative to the new commit (if to REF, and the relation of STARTING-COMMIT relative to the new commit (if
provided) as returned by 'commit-relation'. provided) as returned by 'commit-relation'.
REF is pair whose key is [branch | commit | tag | tag-or-commit ] and value REF is pair whose key is [branch | commit | symref | tag | tag-or-commit ] and value
the associated data: [<branch name> | <sha1> | <tag name> | <string>]. the associated data: [<branch name> | <sha1> | <tag name> | <string>].
If REF is the empty list, the remote HEAD is used. If REF is the empty list, the remote HEAD is used.
@ -592,6 +592,11 @@ current settings unchanged."
(string-append "origin/" branch)))) (string-append "origin/" branch))))
(_ ref))) (_ ref)))
(define symref-list
(match ref
(('symref . symref) (list symref))
(_ '())))
(with-libgit2 (with-libgit2
(set-git-timeouts connection-timeout read-timeout) (set-git-timeouts connection-timeout read-timeout)
(let* ((cache-exists? (openable-repository? cache-directory)) (let* ((cache-exists? (openable-repository? cache-directory))
@ -606,7 +611,10 @@ current settings unchanged."
(remote-fetch (remote-lookup repository "origin") (remote-fetch (remote-lookup repository "origin")
#:fetch-options (make-default-fetch-options #:fetch-options (make-default-fetch-options
#:verify-certificate? #:verify-certificate?
verify-certificate?))) verify-certificate?)
;; Symbolic references are not fetched from the remote by
;; default.
#:refspecs symref-list))
(when recursive? (when recursive?
(update-submodules repository #:log-port log-port (update-submodules repository #:log-port log-port
#:fetch-options #:fetch-options