mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
git: Add ‘tag->commit’ and use it in (guix channels).
* guix/git.scm (tag->commit): New procedure, taken from… (resolve-reference): … here. Use it in the ‘tag’ case. * guix/channels.scm (resolve-channel-news-entry-tag): Use ‘tag->commit’ instead of custom code. Change-Id: I46ea387345dc1b695ce0702991a52d0cde29e2f0
This commit is contained in:
parent
088e181c0a
commit
96d2de0185
2 changed files with 18 additions and 17 deletions
|
@ -26,6 +26,7 @@ (define-module (guix channels)
|
|||
commit-difference
|
||||
repository-info
|
||||
commit-short-id
|
||||
tag->commit
|
||||
with-repository)
|
||||
#:autoload (guix git-authenticate) (authenticate-repository)
|
||||
#:autoload (guix openpgp) (openpgp-public-key-fingerprint
|
||||
|
@ -1148,14 +1149,8 @@ (define (resolve-channel-news-entry-tag repository entry)
|
|||
cannot be found."
|
||||
(if (channel-news-entry-commit entry)
|
||||
entry
|
||||
(let* ((tag (channel-news-entry-tag entry))
|
||||
(reference (reference-lookup repository
|
||||
(string-append "refs/tags/" tag)))
|
||||
(target (reference-target reference))
|
||||
(oid (let ((obj (object-lookup repository target)))
|
||||
(if (= OBJ-TAG (object-type obj)) ;annotated tag?
|
||||
(tag-target-id (tag-lookup repository target))
|
||||
target))))
|
||||
(let* ((tag (channel-news-entry-tag entry))
|
||||
(oid (object-id (tag->commit repository tag))))
|
||||
(channel-news-entry (oid->string oid) tag
|
||||
(channel-news-entry-title entry)
|
||||
(channel-news-entry-body entry)))))
|
||||
|
|
24
guix/git.scm
24
guix/git.scm
|
@ -68,6 +68,7 @@ (define-module (guix git)
|
|||
commit-descendant?
|
||||
commit-id?
|
||||
commit-short-id
|
||||
tag->commit
|
||||
|
||||
remote-refs
|
||||
|
||||
|
@ -237,6 +238,19 @@ (define (commit-id? str)
|
|||
(define commit-short-id
|
||||
(compose (cut string-take <> 7) oid->string commit-id))
|
||||
|
||||
(define (tag->commit repository tag)
|
||||
"Resolve TAG in REPOSITORY and return the corresponding object, usually a
|
||||
commit."
|
||||
(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 (resolve-reference repository ref)
|
||||
"Resolve the branch, commit or tag specified by REF, and return the
|
||||
corresponding Git object."
|
||||
|
@ -283,15 +297,7 @@ (define (resolve-reference repository ref)
|
|||
;; 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)))
|
||||
(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))))))
|
||||
(tag->commit repository tag)))))
|
||||
|
||||
(define (switch-to-ref repository ref)
|
||||
"Switch to REPOSITORY's branch, commit or tag specified by REF. Return the
|
||||
|
|
Loading…
Reference in a new issue