diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2022-10-25 21:50:59 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2022-10-25 21:50:59 +0300 |
commit | 6ff203663e696b74e711ab09d6f4b35c2c332f0f (patch) | |
tree | 4bf2c77c62fa60febba527a76b1ecffaa0a00a0d /guix/git.scm | |
parent | 408a4ed071c9c52de207d799a698781d49fa727d (diff) | |
parent | a0751e3250dfea7e52468c8090e18c3118d93a60 (diff) |
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'guix/git.scm')
-rw-r--r-- | guix/git.scm | 15 |
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 |