git: 'update-cached-checkout' supports a 'tag-or-commit' type of ref.
* guix/git.scm (switch-to-ref)[obj]: Wrap in 'resolve' lambda. Add 'tag-or-commit' case. (update-cached-checkout): Document it.
This commit is contained in:
parent
422e187fb4
commit
c4c2449fea
17
guix/git.scm
17
guix/git.scm
|
@ -139,6 +139,7 @@ of SHA1 string."
|
||||||
"Switch to REPOSITORY's branch, commit or tag specified by REF. Return the
|
"Switch to REPOSITORY's branch, commit or tag specified by REF. Return the
|
||||||
OID (roughly the commit hash) corresponding to REF."
|
OID (roughly the commit hash) corresponding to REF."
|
||||||
(define obj
|
(define obj
|
||||||
|
(let resolve ((ref ref))
|
||||||
(match ref
|
(match ref
|
||||||
(('branch . branch)
|
(('branch . branch)
|
||||||
(let ((oid (reference-target
|
(let ((oid (reference-target
|
||||||
|
@ -158,10 +159,20 @@ OID (roughly the commit hash) corresponding to REF."
|
||||||
(&message
|
(&message
|
||||||
(message "long Git object ID is required")))))
|
(message "long Git object ID is required")))))
|
||||||
(object-lookup repository (string->oid commit)))))
|
(object-lookup repository (string->oid commit)))))
|
||||||
|
(('tag-or-commit . str)
|
||||||
|
(if (or (> (string-length str) 40)
|
||||||
|
(not (string-every char-set:hex-digit str)))
|
||||||
|
(resolve `(tag . ,str)) ;definitely a tag
|
||||||
|
(catch 'git-error
|
||||||
|
(lambda ()
|
||||||
|
(resolve `(tag . ,str)))
|
||||||
|
(lambda _
|
||||||
|
;; There's no such tag, so it must be a commit ID.
|
||||||
|
(resolve `(commit . ,str))))))
|
||||||
(('tag . tag)
|
(('tag . tag)
|
||||||
(let ((oid (reference-name->oid repository
|
(let ((oid (reference-name->oid repository
|
||||||
(string-append "refs/tags/" tag))))
|
(string-append "refs/tags/" tag))))
|
||||||
(object-lookup repository oid)))))
|
(object-lookup repository oid))))))
|
||||||
|
|
||||||
(reset repository obj RESET_HARD)
|
(reset repository obj RESET_HARD)
|
||||||
(object-id obj))
|
(object-id obj))
|
||||||
|
@ -218,8 +229,8 @@ please upgrade Guile-Git.~%"))))
|
||||||
values: the cache directory name, and the SHA1 commit (a string) corresponding
|
values: the cache directory name, and the SHA1 commit (a string) corresponding
|
||||||
to REF.
|
to REF.
|
||||||
|
|
||||||
REF is pair whose key is [branch | commit | tag] and value the associated
|
REF is pair whose key is [branch | commit | tag | tag-or-commit ] and value
|
||||||
data, respectively [<branch name> | <sha1> | <tag name>].
|
the associated data: [<branch name> | <sha1> | <tag name> | <string>].
|
||||||
|
|
||||||
When RECURSIVE? is true, check out submodules as well, if any."
|
When RECURSIVE? is true, check out submodules as well, if any."
|
||||||
(define canonical-ref
|
(define canonical-ref
|
||||||
|
|
Loading…
Reference in New Issue