summaryrefslogtreecommitdiff
path: root/guix/git.scm
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2022-10-25 21:50:59 +0300
committerEfraim Flashner <efraim@flashner.co.il>2022-10-25 21:50:59 +0300
commit6ff203663e696b74e711ab09d6f4b35c2c332f0f (patch)
tree4bf2c77c62fa60febba527a76b1ecffaa0a00a0d /guix/git.scm
parent408a4ed071c9c52de207d799a698781d49fa727d (diff)
parenta0751e3250dfea7e52468c8090e18c3118d93a60 (diff)
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'guix/git.scm')
-rw-r--r--guix/git.scm15
1 files changed, 9 insertions, 6 deletions
diff --git a/guix/git.scm b/guix/git.scm
index 10e6dcaf23..95630a5e69 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -272,12 +272,15 @@ corresponding Git object."
;; There's no such tag, so it must be a commit ID.
(resolve `(commit . ,str)))))))
(('tag . tag)
- (let ((oid (reference-name->oid repository
- (string-append "refs/tags/" tag))))
- ;; OID may point to a "tag" object, but it can also point directly
- ;; to a "commit" object, as surprising as it may seem. Return that
- ;; object, whatever that is.
- (object-lookup repository oid))))))
+ (let* ((oid (reference-name->oid repository
+ (string-append "refs/tags/" tag)))
+ (obj (object-lookup repository oid)))
+ ;; OID may designate an "annotated tag" object or a "commit" object.
+ ;; Return the commit object in both cases.
+ (if (= OBJ-TAG (object-type obj))
+ (object-lookup repository
+ (tag-target-id (tag-lookup repository oid)))
+ obj))))))
(define (switch-to-ref repository ref)
"Switch to REPOSITORY's branch, commit or tag specified by REF. Return the