import: github: Filter out tags that don't look like version numbers.

* guix/import/github.scm (latest-released-version): Filter out RELEASE
if it doesn't start with digit.
This commit is contained in:
Ludovic Courtès 2018-08-20 16:31:32 +02:00
parent 64bcc76c00
commit bab4dc58f7
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 22 additions and 14 deletions

View File

@ -172,19 +172,19 @@ API when using a GitHub token")
API. This may be fixed by using an access token and setting the environment API. This may be fixed by using an access token and setting the environment
variable GUIX_GITHUB_TOKEN, for instance one procured from variable GUIX_GITHUB_TOKEN, for instance one procured from
https://github.com/settings/tokens")) https://github.com/settings/tokens"))
(let ((proper-releases (let loop ((releases
(filter (filter
(lambda (x) (lambda (x)
;; example pre-release: ;; example pre-release:
;; https://github.com/wwood/OrfM/releases/tag/v0.5.1 ;; https://github.com/wwood/OrfM/releases/tag/v0.5.1
;; or an all-prerelease set ;; or an all-prerelease set
;; https://github.com/powertab/powertabeditor/releases ;; https://github.com/powertab/powertabeditor/releases
(not (hash-ref x "prerelease"))) (not (hash-ref x "prerelease")))
json))) json)))
(match proper-releases (match releases
(() ;empty release list (() ;empty release list
#f) #f)
((release . rest) ;one or more releases ((release . rest) ;one or more releases
(let ((tag (or (hash-ref release "tag_name") ;a "release" (let ((tag (or (hash-ref release "tag_name") ;a "release"
(hash-ref release "name"))) ;a tag (hash-ref release "name"))) ;a tag
(name-length (string-length package-name))) (name-length (string-length package-name)))
@ -196,8 +196,16 @@ https://github.com/settings/tokens"))
(substring tag (+ name-length 1)) (substring tag (+ name-length 1))
;; some tags start with a "v" e.g. "v0.25.0" ;; some tags start with a "v" e.g. "v0.25.0"
;; where some are just the version number ;; where some are just the version number
(if (eq? (string-ref tag 0) #\v) (if (string-prefix? "v" tag)
(substring tag 1) tag))))))))) (substring tag 1)
;; Finally, reject tags that don't start with a digit:
;; they may not represent a release.
(if (and (not (string-null? tag))
(char-set-contains? char-set:digit
(string-ref tag 0)))
tag
(loop rest)))))))))))
(define (latest-release pkg) (define (latest-release pkg)
"Return an <upstream-source> for the latest release of PKG." "Return an <upstream-source> for the latest release of PKG."