mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
build-system/go: Add subdir parameter to go-version->git-ref.
This implements logic to handle cases where Go can have multiple modules at different versions within a single repository. It distinguishes their releases by using tags along with their subdirectories. See https://go.dev/ref/mod#vcs-version. * guix/build-system/go.scm (go-version->git-ref): Add <#:subdir> keyword parameter and extend condition checks. Change-Id: I68bc9e785e49877bb0b756de8458308549f4c957 Co-authored-by: Sharlatan Hellseher <sharlatanus@gmail.com> Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
This commit is contained in:
parent
ecdca86e1c
commit
18a77fb3f8
1 changed files with 11 additions and 3 deletions
|
@ -58,11 +58,13 @@
|
||||||
"([0-9A-Fa-f]{12})" ;commit hash
|
"([0-9A-Fa-f]{12})" ;commit hash
|
||||||
"(\\+incompatible)?$"))) ;optional +incompatible tag
|
"(\\+incompatible)?$"))) ;optional +incompatible tag
|
||||||
|
|
||||||
(define (go-version->git-ref version)
|
(define* (go-version->git-ref version #:key subdir)
|
||||||
"Parse VERSION, a \"pseudo-version\" as defined at
|
"Parse VERSION, a \"pseudo-version\" as defined at
|
||||||
<https://golang.org/ref/mod#pseudo-versions>, and extract the commit hash from
|
<https://golang.org/ref/mod#pseudo-versions>, and extract the commit hash from
|
||||||
it, defaulting to full VERSION (stripped from the \"+incompatible\" suffix if
|
it, defaulting to full VERSION (stripped from the \"+incompatible\" suffix if
|
||||||
present) if a pseudo-version pattern is not recognized."
|
present) if a pseudo-version pattern is not recognized. If SUBDIR is
|
||||||
|
specified and this is not a pseudo-version, then this will prefix SUBDIR/ to
|
||||||
|
the returned tag; when VERSION misses 'v' prefix use SUBDIR/v instead."
|
||||||
;; A module version like v1.2.3 is introduced by tagging a revision in the
|
;; A module version like v1.2.3 is introduced by tagging a revision in the
|
||||||
;; underlying source repository. Untagged revisions can be referred to
|
;; underlying source repository. Untagged revisions can be referred to
|
||||||
;; using a "pseudo-version" like v0.0.0-yyyymmddhhmmss-abcdefabcdef, where
|
;; using a "pseudo-version" like v0.0.0-yyyymmddhhmmss-abcdefabcdef, where
|
||||||
|
@ -80,7 +82,13 @@ present) if a pseudo-version pattern is not recognized."
|
||||||
(match (regexp-exec %go-pseudo-version-rx version)))
|
(match (regexp-exec %go-pseudo-version-rx version)))
|
||||||
(if match
|
(if match
|
||||||
(match:substring match 2)
|
(match:substring match 2)
|
||||||
version)))
|
(cond
|
||||||
|
((and subdir (string-prefix? "v" version))
|
||||||
|
(string-append subdir "/" version))
|
||||||
|
((and subdir (not (string-prefix? "v" version)))
|
||||||
|
(string-append subdir "/v" version))
|
||||||
|
(else
|
||||||
|
version)))))
|
||||||
|
|
||||||
(define (go-pseudo-version? version)
|
(define (go-pseudo-version? version)
|
||||||
"True if VERSION is a Go pseudo-version, i.e., a version string made of a
|
"True if VERSION is a Go pseudo-version, i.e., a version string made of a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue