import: github: Improve readability.

* guix/import/github.scm (latest-released-version): Use any and cond instead
of a recursive loop and an if-else ladder respectively.
This commit is contained in:
Arun Isaac 2019-01-21 01:43:09 +05:30
parent 6b7ea49bed
commit cb5fe915d2
No known key found for this signature in database
GPG Key ID: 2E25EE8B61802BB3
1 changed files with 26 additions and 29 deletions

View File

@ -183,35 +183,32 @@ 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 loop ((releases (any
(match (remove pre-release? json) (lambda (release)
(() json) ; keep everything (let ((tag (or (hash-ref release "tag_name") ;a "release"
(releases releases)))) (hash-ref release "name"))) ;a tag
(match releases (name-length (string-length package-name)))
(() ;empty release list (cond
#f) ;; some tags include the name of the package e.g. "fdupes-1.51"
((release . rest) ;one or more releases ;; so remove these
(let ((tag (or (hash-ref release "tag_name") ;a "release" ((and (< name-length (string-length tag))
(hash-ref release "name"))) ;a tag (string=? (string-append package-name "-")
(name-length (string-length package-name))) (substring tag 0 (+ name-length 1))))
;; some tags include the name of the package e.g. "fdupes-1.51" (substring tag (+ name-length 1)))
;; so remove these ;; some tags start with a "v" e.g. "v0.25.0"
(if (and (< name-length (string-length tag)) ;; where some are just the version number
(string=? (string-append package-name "-") ((string-prefix? "v" tag)
(substring tag 0 (+ name-length 1)))) (substring tag 1))
(substring tag (+ name-length 1)) ;; Finally, reject tags that don't start with a digit:
;; some tags start with a "v" e.g. "v0.25.0" ;; they may not represent a release.
;; where some are just the version number ((and (not (string-null? tag))
(if (string-prefix? "v" tag) (char-set-contains? char-set:digit
(substring tag 1) (string-ref tag 0)))
tag)
;; Finally, reject tags that don't start with a digit: (else #f))))
;; they may not represent a release. (match (remove pre-release? json)
(if (and (not (string-null? tag)) (() json) ; keep everything
(char-set-contains? char-set:digit (releases releases))))))
(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."