gnu-maintenance: Get GNU metadata from rec files.

Suggested by Mike Gerwitz <mtg@gnu.org>.

* guix/gnu-maintenance.scm (%package-list-url): Use the .rec file.
(%package-description-url): Likewise.
(official-gnu-packages)[read-records]: Skip record descriptors.
Rename fields to use underscores instead of hyphens.
This commit is contained in:
Ludovic Courtès 2018-07-11 14:28:23 +02:00
parent cd6ae1cee9
commit daf76c7cd5
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
@ -82,13 +82,14 @@ (define %gnumaint-base-url
(define %package-list-url (define %package-list-url
(string->uri (string->uri
(string-append %gnumaint-base-url "gnupackages.txt"))) (string-append %gnumaint-base-url "rec/gnupackages.rec")))
(define %package-description-url (define %package-description-url
;; This file contains package descriptions in recutils format. ;; This file contains package descriptions in recutils format.
;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html>. ;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html>
;; and <https://lists.gnu.org/archive/html/guix-devel/2018-06/msg00362.html>.
(string->uri (string->uri
(string-append %gnumaint-base-url "pkgblurbs.txt"))) (string-append %gnumaint-base-url "rec/pkgblurbs.rec")))
(define-record-type* <gnu-package-descriptor> (define-record-type* <gnu-package-descriptor>
gnu-package-descriptor gnu-package-descriptor
@ -121,7 +122,12 @@ (define (read-records port)
(if (null? alist) (if (null? alist)
(reverse result) (reverse result)
(loop (recutils->alist port) (loop (recutils->alist port)
(cons alist result)))))
;; Ignore things like "%rec" (info "(recutils) Record
;; Descriptors").
(if (assoc-ref alist "package")
(cons alist result)
result)))))
(define official-description (define official-description
(let ((db (read-records (fetch %package-description-url #:text? #t)))) (let ((db (read-records (fetch %package-description-url #:text? #t))))
@ -148,12 +154,12 @@ (define official-description
(alist->record `(("description" . ,(official-description name)) (alist->record `(("description" . ,(official-description name))
,@alist) ,@alist)
make-gnu-package-descriptor make-gnu-package-descriptor
(list "package" "mundane-name" "copyright-holder" (list "package" "mundane_name" "copyright_holder"
"savannah" "fsd" "language" "logo" "savannah" "fsd" "language" "logo"
"doc-category" "doc-summary" "description" "doc_category" "doc_summary" "description"
"doc-url" "doc_url"
"download-url") "download_url")
'("doc-url" "language")))) '("doc_url" "language"))))
(let* ((port (fetch %package-list-url #:text? #t)) (let* ((port (fetch %package-list-url #:text? #t))
(lst (read-records port))) (lst (read-records port)))
(close-port port) (close-port port)