import: github: Sort releases before picking the latest one.

DoneSubmitted by Arun Isaac.
Details
2 participants
  • Arun Isaac
  • Ludovic Courtès
Owner
unassigned
Severity
normal
A
A
Arun Isaac wrote on 11 May 2019 13:23
(address . guix-patches@gnu.org)
cu7h8a19qvq.fsf@systemreboot.net
Prior to this, for some packages (e.g., osc in (gnu packagesbuild-tools)), `guix refresh' could not find the latest versioncorrectly.
From 33f42ea8a33c6e502062708336a5ab8be871c92b Mon Sep 17 00:00:00 2001From: Arun Isaac <arunisaac@systemreboot.net>Date: Sat, 11 May 2019 16:40:38 +0530Subject: [PATCH] import: github: Sort releases before picking the latest one.
* guix/import/github.scm (latest-released-version): Sort releases beforepicking the first one as the latest.--- guix/import/github.scm | 55 ++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 26 deletions(-)
Toggle diff (68 lines)diff --git a/guix/import/github.scm b/guix/import/github.scmindex 4d12339204..a8af318bc8 100644--- a/guix/import/github.scm+++ b/guix/import/github.scm@@ -183,32 +183,35 @@ API when using a GitHub token") API. This may be fixed by using an access token and setting the environment variable GUIX_GITHUB_TOKEN, for instance one procured from https://github.com/settings/tokens"))- (any- (lambda (release)- (let ((tag (or (hash-ref release "tag_name") ;a "release"- (hash-ref release "name"))) ;a tag- (name-length (string-length package-name)))- (cond- ;; some tags include the name of the package e.g. "fdupes-1.51"- ;; so remove these- ((and (< name-length (string-length tag))- (string=? (string-append package-name "-")- (substring tag 0 (+ name-length 1))))- (substring tag (+ name-length 1)))- ;; some tags start with a "v" e.g. "v0.25.0"- ;; where some are just the version number- ((string-prefix? "v" tag)- (substring tag 1))- ;; Finally, reject tags that don't start with a digit:- ;; they may not represent a release.- ((and (not (string-null? tag))- (char-set-contains? char-set:digit- (string-ref tag 0)))- tag)- (else #f))))- (match (remove pre-release? json)- (() json) ; keep everything- (releases releases))))))+ (first+ (sort+ (filter-map+ (lambda (release)+ (let ((tag (or (hash-ref release "tag_name") ;a "release"+ (hash-ref release "name"))) ;a tag+ (name-length (string-length package-name)))+ (cond+ ;; some tags include the name of the package e.g. "fdupes-1.51"+ ;; so remove these+ ((and (< name-length (string-length tag))+ (string=? (string-append package-name "-")+ (substring tag 0 (+ name-length 1))))+ (substring tag (+ name-length 1)))+ ;; some tags start with a "v" e.g. "v0.25.0"+ ;; where some are just the version number+ ((string-prefix? "v" tag)+ (substring tag 1))+ ;; Finally, reject tags that don't start with a digit:+ ;; they may not represent a release.+ ((and (not (string-null? tag))+ (char-set-contains? char-set:digit+ (string-ref tag 0)))+ tag)+ (else #f))))+ (match (remove pre-release? json)+ (() json) ; keep everything+ (releases releases)))+ version>?))))) (define (latest-release pkg) "Return an <upstream-source> for the latest release of PKG."-- 2.21.0
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEf3MDQ/Lwnzx3v3nTLiXui2GAK7MFAlzWsKoACgkQLiXui2GAK7NdjwgAqQ/YarcqTl9yArKcCvLRCXq0Ta/Y3ZDRf2qz2mTRs/3bPivIQEG+5oJfBPnlrSA6NQIrku7tM/ryRtNQGag/O8yUEdi496vU7mxa1X6jJlxXYaLOKGat7wp6ZN6QrjKhx5oUlYUXEtuhRHgLUUlQvTQ95oFhVvP8jf8lC0E3va115Mt3KXMLTm3peasLET250+FnP5P3Q6+L4XtJ0Wwro7Y6UKnpCeUgI9DcZ0FvVYrbMSbx4wTtf1OT872RXgiB5JCLxXaqUP+G+96U1+sfZWfnu4tX+QYljQ1wNSMUwd9DZ5QlytvHiOQjNtkRv8W24JRwrPVphqCEPcrJ7WkqNg===vJPD-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 12 May 2019 23:47
(name . Arun Isaac)(address . arunisaac@systemreboot.net)(address . 35684@debbugs.gnu.org)
87mujrs5ut.fsf@gnu.org
Arun Isaac <arunisaac@systemreboot.net> skribis:
Toggle quote (4 lines)> Prior to this, for some packages (e.g., osc in (gnu packages> build-tools)), `guix refresh' could not find the latest version> correctly.
Good catch.
Toggle quote (8 lines)> From 33f42ea8a33c6e502062708336a5ab8be871c92b Mon Sep 17 00:00:00 2001> From: Arun Isaac <arunisaac@systemreboot.net>> Date: Sat, 11 May 2019 16:40:38 +0530> Subject: [PATCH] import: github: Sort releases before picking the latest one.>> * guix/import/github.scm (latest-released-version): Sort releases before> picking the first one as the latest.
[...]
Toggle quote (30 lines)> + (first> + (sort> + (filter-map> + (lambda (release)> + (let ((tag (or (hash-ref release "tag_name") ;a "release"> + (hash-ref release "name"))) ;a tag> + (name-length (string-length package-name)))> + (cond> + ;; some tags include the name of the package e.g. "fdupes-1.51"> + ;; so remove these> + ((and (< name-length (string-length tag))> + (string=? (string-append package-name "-")> + (substring tag 0 (+ name-length 1))))> + (substring tag (+ name-length 1)))> + ;; some tags start with a "v" e.g. "v0.25.0"> + ;; where some are just the version number> + ((string-prefix? "v" tag)> + (substring tag 1))> + ;; Finally, reject tags that don't start with a digit:> + ;; they may not represent a release.> + ((and (not (string-null? tag))> + (char-set-contains? char-set:digit> + (string-ref tag 0)))> + tag)> + (else #f))))> + (match (remove pre-release? json)> + (() json) ; keep everything> + (releases releases)))> + version>?)))))
LGTM, but…
… while you’re at it, would you mind cleaning this up a bit? :-)Namely, I think this big ‘lambda’ could be given a name and moved out ofthe way to make ‘latest-released-version’ easier to read. Also, itwould probably be reasonable to avoid ‘first’ and instead write:
(match (sort …) ((first . _) first) (() (leave (G_ "no releases found etc.~%"))))
WDYT? :-)
If you’d rather leave that for later, you can also just go ahead andcommit your patch.
Thanks,Ludo’.
A
A
Arun Isaac wrote on 13 May 2019 10:08
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35684@debbugs.gnu.org)
cu7zhnq93p6.fsf@systemreboot.net
Toggle quote (14 lines)> Namely, I think this big ‘lambda’ could be given a name and moved out of> the way to make ‘latest-released-version’ easier to read. Also, it> would probably be reasonable to avoid ‘first’ and instead write:>> (match (sort …)> ((first . _) first)> (()> (leave (G_ "no releases found etc.~%"))))>> WDYT? :-)>> If you’d rather leave that for later, you can also just go ahead and> commit your patch.
No problem! :-) Here is the updated patch.
From d3f28de8fedc41732a07edf2ea91222208ccc73f Mon Sep 17 00:00:00 2001From: Arun Isaac <arunisaac@systemreboot.net>Date: Sat, 11 May 2019 16:40:38 +0530Subject: [PATCH] import: github: Sort releases before picking the latest one.
* guix/import/github.scm (latest-released-version): Sort releases beforepicking the first one as the latest.--- guix/import/github.scm | 56 ++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 26 deletions(-)
Toggle diff (76 lines)diff --git a/guix/import/github.scm b/guix/import/github.scmindex 4d12339204..cdac70420a 100644--- a/guix/import/github.scm+++ b/guix/import/github.scm@@ -174,6 +174,29 @@ the package e.g. 'bedtools2'. Return #f if there is no releases" (define (pre-release? x) (hash-ref x "prerelease")) + (define (release->version release)+ (let ((tag (or (hash-ref release "tag_name") ;a "release"+ (hash-ref release "name"))) ;a tag+ (name-length (string-length package-name)))+ (cond+ ;; some tags include the name of the package e.g. "fdupes-1.51"+ ;; so remove these+ ((and (< name-length (string-length tag))+ (string=? (string-append package-name "-")+ (substring tag 0 (+ name-length 1))))+ (substring tag (+ name-length 1)))+ ;; some tags start with a "v" e.g. "v0.25.0"+ ;; where some are just the version number+ ((string-prefix? "v" tag)+ (substring tag 1))+ ;; Finally, reject tags that don't start with a digit:+ ;; they may not represent a release.+ ((and (not (string-null? tag))+ (char-set-contains? char-set:digit+ (string-ref tag 0)))+ tag)+ (else #f))))+ (let* ((json (fetch-releases-or-tags url))) (if (eq? json #f) (if (%github-token)@@ -183,32 +206,13 @@ API when using a GitHub token") API. This may be fixed by using an access token and setting the environment variable GUIX_GITHUB_TOKEN, for instance one procured from https://github.com/settings/tokens"))- (any- (lambda (release)- (let ((tag (or (hash-ref release "tag_name") ;a "release"- (hash-ref release "name"))) ;a tag- (name-length (string-length package-name)))- (cond- ;; some tags include the name of the package e.g. "fdupes-1.51"- ;; so remove these- ((and (< name-length (string-length tag))- (string=? (string-append package-name "-")- (substring tag 0 (+ name-length 1))))- (substring tag (+ name-length 1)))- ;; some tags start with a "v" e.g. "v0.25.0"- ;; where some are just the version number- ((string-prefix? "v" tag)- (substring tag 1))- ;; Finally, reject tags that don't start with a digit:- ;; they may not represent a release.- ((and (not (string-null? tag))- (char-set-contains? char-set:digit- (string-ref tag 0)))- tag)- (else #f))))- (match (remove pre-release? json)- (() json) ; keep everything- (releases releases))))))+ (match (sort (filter-map release->version+ (match (remove pre-release? json)+ (() json) ; keep everything+ (releases releases)))+ version>?)+ ((latest-release . _) latest-release)+ (() #f))))) (define (latest-release pkg) "Return an <upstream-source> for the latest release of PKG."-- 2.21.0
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEf3MDQ/Lwnzx3v3nTLiXui2GAK7MFAlzZJgUACgkQLiXui2GAK7O7jQf/eXgA1csQzNoh9vbbaBl+LkHeniV6rinV/90/ml+2/xkYjFOzmLrL4i7yB1KKfFjgNezcL9AWvr1XJSrPRnZV/ERhSkgIAxSaZPRD7BgkmAfYo2kSBu9XWYjOljMc72/Oqd2cSxfkGJbNf2sAG/LgabLxnSZ8Avfgh6l77LzCYgCoyt0Ytf/N1PU3k295117JlnGRoyb0O5lJVKNPk0x7dhz87BU7tTowa1O5hMSrNXiPcXhg5ov1Gx41sb4sW8asgU7JPxprxVlMe1oHZaY3s0sTgLPkRYc6d8rqkdAooz7TWn48Jy6TaUAwPb0v8GSAXtkVo0LxWs4agGUw5Tw2yg===6lPO-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 13 May 2019 15:42
(name . Arun Isaac)(address . arunisaac@systemreboot.net)(address . 35684@debbugs.gnu.org)
87d0kmsc66.fsf@gnu.org
Arun Isaac <arunisaac@systemreboot.net> skribis:
Toggle quote (8 lines)> From d3f28de8fedc41732a07edf2ea91222208ccc73f Mon Sep 17 00:00:00 2001> From: Arun Isaac <arunisaac@systemreboot.net>> Date: Sat, 11 May 2019 16:40:38 +0530> Subject: [PATCH] import: github: Sort releases before picking the latest one.>> * guix/import/github.scm (latest-released-version): Sort releases before> picking the first one as the latest.
Very nice, LGTM! If you don’t mind, you can make it two patches forclarity (one that defines ‘release->version’, and one that adds the callto ‘sort’); otherwise just amend the commit log above to mention‘release->version’.
Thank you!
Ludo’.
A
A
Arun Isaac wrote on 14 May 2019 12:19
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35684@debbugs.gnu.org)
cu7y3398hk3.fsf@systemreboot.net
Toggle quote (3 lines)> If you don’t mind, you can make it two patches for clarity (one that> defines ‘release->version’, and one that adds the call to ‘sort’)
Sure, pleae find attached.
From c96956bc6e944f9691773640e402c15215078943 Mon Sep 17 00:00:00 2001From: Arun Isaac <arunisaac@systemreboot.net>Date: Tue, 14 May 2019 15:44:46 +0530Subject: [PATCH 1/2] import: github: Improve readability.
* guix/import/github.scm (latest-released-version)[release->version]: Separateout release->version as a new function.--- guix/import/github.scm | 53 +++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 26 deletions(-)
Toggle diff (73 lines)diff --git a/guix/import/github.scm b/guix/import/github.scmindex 4d12339204..5f4d9c7267 100644--- a/guix/import/github.scm+++ b/guix/import/github.scm@@ -174,6 +174,29 @@ the package e.g. 'bedtools2'. Return #f if there is no releases" (define (pre-release? x) (hash-ref x "prerelease")) + (define (release->version release)+ (let ((tag (or (hash-ref release "tag_name") ;a "release"+ (hash-ref release "name"))) ;a tag+ (name-length (string-length package-name)))+ (cond+ ;; some tags include the name of the package e.g. "fdupes-1.51"+ ;; so remove these+ ((and (< name-length (string-length tag))+ (string=? (string-append package-name "-")+ (substring tag 0 (+ name-length 1))))+ (substring tag (+ name-length 1)))+ ;; some tags start with a "v" e.g. "v0.25.0"+ ;; where some are just the version number+ ((string-prefix? "v" tag)+ (substring tag 1))+ ;; Finally, reject tags that don't start with a digit:+ ;; they may not represent a release.+ ((and (not (string-null? tag))+ (char-set-contains? char-set:digit+ (string-ref tag 0)))+ tag)+ (else #f))))+ (let* ((json (fetch-releases-or-tags url))) (if (eq? json #f) (if (%github-token)@@ -183,32 +206,10 @@ API when using a GitHub token") API. This may be fixed by using an access token and setting the environment variable GUIX_GITHUB_TOKEN, for instance one procured from https://github.com/settings/tokens"))- (any- (lambda (release)- (let ((tag (or (hash-ref release "tag_name") ;a "release"- (hash-ref release "name"))) ;a tag- (name-length (string-length package-name)))- (cond- ;; some tags include the name of the package e.g. "fdupes-1.51"- ;; so remove these- ((and (< name-length (string-length tag))- (string=? (string-append package-name "-")- (substring tag 0 (+ name-length 1))))- (substring tag (+ name-length 1)))- ;; some tags start with a "v" e.g. "v0.25.0"- ;; where some are just the version number- ((string-prefix? "v" tag)- (substring tag 1))- ;; Finally, reject tags that don't start with a digit:- ;; they may not represent a release.- ((and (not (string-null? tag))- (char-set-contains? char-set:digit- (string-ref tag 0)))- tag)- (else #f))))- (match (remove pre-release? json)- (() json) ; keep everything- (releases releases))))))+ (any release->version+ (match (remove pre-release? json)+ (() json) ; keep everything+ (releases releases)))))) (define (latest-release pkg) "Return an <upstream-source> for the latest release of PKG."-- 2.21.0
From 8192712f8108d0abcd527ff6b16af073c453b780 Mon Sep 17 00:00:00 2001From: Arun Isaac <arunisaac@systemreboot.net>Date: Tue, 14 May 2019 15:46:19 +0530Subject: [PATCH 2/2] import: github: Sort releases before picking the latest one.
* guix/import/github.scm (latest-released-version): Sort releases beforepicking the first one as the latest.--- guix/import/github.scm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
Toggle diff (24 lines)diff --git a/guix/import/github.scm b/guix/import/github.scmindex 5f4d9c7267..cdac70420a 100644--- a/guix/import/github.scm+++ b/guix/import/github.scm@@ -206,10 +206,13 @@ API when using a GitHub token") API. This may be fixed by using an access token and setting the environment variable GUIX_GITHUB_TOKEN, for instance one procured from https://github.com/settings/tokens"))- (any release->version- (match (remove pre-release? json)- (() json) ; keep everything- (releases releases))))))+ (match (sort (filter-map release->version+ (match (remove pre-release? json)+ (() json) ; keep everything+ (releases releases)))+ version>?)+ ((latest-release . _) latest-release)+ (() #f))))) (define (latest-release pkg) "Return an <upstream-source> for the latest release of PKG."-- 2.21.0
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEf3MDQ/Lwnzx3v3nTLiXui2GAK7MFAlzalhwACgkQLiXui2GAK7PzBAgAoyQgzvScfXVyu3WxGjqIydu+o3e4bzwrPP7VvZWLMky+km0rYjxqrcyovAADbQp1jLKOYAiKBFpyHj7p84H9TSv4PY/QMlbRrROgl06SPo64IbN/v8cZCzi4kq7U0ALlLgj2XapAa1LNoc1stfxR+CTj9QRVdnzXrPBKM58gg8Z0KXPvfQrJBnLh2i4MMkud9dziXvn3yUGPHvKMKH6k0F1lPJ/iXnXd2zeMnTzVIfPF2CreGg9JXk3iuUbbwtnW9vjBPcawdU4YSGIGrDnIC3nqRjJXKNJk/88wxiMMG+IapkJ1MK5o9v4zCD6IeRzEKc8bWDPi1r8D+HYeilGMdg===Wc/a-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 14 May 2019 22:59
(name . Arun Isaac)(address . arunisaac@systemreboot.net)(address . 35684@debbugs.gnu.org)
87tvdwwy4p.fsf@gnu.org
Arun Isaac <arunisaac@systemreboot.net> skribis:
Toggle quote (5 lines)>> If you don’t mind, you can make it two patches for clarity (one that>> defines ‘release->version’, and one that adds the call to ‘sort’)>> Sure, pleae find attached.
Thank you, it still LGTM. :-)
Ludo’.
A
A
Arun Isaac wrote on 15 May 2019 10:25
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35684-done@debbugs.gnu.org)
cu77eas86ps.fsf@systemreboot.net
Pushed to master, thanks!
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEf3MDQ/Lwnzx3v3nTLiXui2GAK7MFAlzbzP8ACgkQLiXui2GAK7MGjAgAx7hqY3JZmUSRupNO1F5QrsdjBCY7vaNZ6ux0C0tgJxaf3uvVQZrN6hNE4H+4vnApCgoQn4ulZfT6qnZKcocyx9jn5o67rr7aN+dinNxPyLfDCcFmVZ8hLI17IIV0CqSY3acPwo9j0WNmnrchrRRnBv7Em/bcm3S5hWLyUqG2eprbJxTzNZHXAsupum11iJz2GhEeXMakfrE0cBuh39abysBqjLzQ/s2pM8dx33cyt2cJE2kbw0+WD5TI+1TR5tIR35dVcMRDl7cf4Ka6x5CtMVh+CnXvB9LvBK4vJ2G76Z71GfsVMW0/hLBMYAAQvdUPlZIhSbNmNjx6dAOMQD/+Gg===iFRv-----END PGP SIGNATURE-----
Closed
?
Your comment

This issue is archived.

To comment on this conversation send email to 35684@debbugs.gnu.org