summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-11-19 22:52:14 +0100
committerLudovic Courtès <ludo@gnu.org>2014-11-19 22:52:28 +0100
commit37627ffa89dc318858c14073e6cf238e1f531b36 (patch)
tree2d62f9b64251d7ac50de4c91083b3efffaeeaefc
parentdd3b6d66b9c9bb18d00deff7d4ca011dbfbdf122 (diff)
lint: Fold 'sync-descriptions' script as 'gnu-description' lint checker.
* build-aux/sync-descriptions.scm: Remove. Move payload to... * guix/scripts/lint.scm: ... here. (escape-quotes, official-gnu-packages*, check-gnu-synopsis+description): New procedures. (%checkers): Add 'gnu-descriptions'. * Makefile.am (EXTRA_DIST): Remove build-aux/sync-descriptions.scm. (sync-descriptions): Use 'guix lint'.
-rw-r--r--Makefile.am4
-rw-r--r--build-aux/sync-descriptions.scm85
-rw-r--r--guix/scripts/lint.scm60
3 files changed, 61 insertions, 88 deletions
diff --git a/Makefile.am b/Makefile.am
index 075726d309..ee029c3735 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -233,7 +233,6 @@ EXTRA_DIST = \
build-aux/check-final-inputs-self-contained.scm \
build-aux/download.scm \
build-aux/list-packages.scm \
- build-aux/sync-descriptions.scm \
srfi/srfi-37.scm.in \
srfi/srfi-64.scm \
srfi/srfi-64.upstream.scm \
@@ -308,8 +307,7 @@ dist-hook: sync-descriptions gen-ChangeLog assert-no-store-file-names
distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
sync-descriptions:
- -$(top_builddir)/pre-inst-env $(GUILE) \
- $(top_srcdir)/build-aux/sync-descriptions.scm
+ -$(top_builddir)/pre-inst-env guix lint --checkers=gnu-description
gen-ChangeLog:
if test -d .git; then \
diff --git a/build-aux/sync-descriptions.scm b/build-aux/sync-descriptions.scm
deleted file mode 100644
index 6ff549c309..0000000000
--- a/build-aux/sync-descriptions.scm
+++ /dev/null
@@ -1,85 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
-
-;;;
-;;; Report package synopses and descriptions that defer from those found in
-;;; the GNU Womb.
-;;;
-
-(use-modules (guix gnu-maintenance)
- (guix packages)
- (guix utils)
- (guix ui)
- (gnu packages)
- (srfi srfi-1)
- (srfi srfi-26)
- (ice-9 match))
-
-(define official
- ;; GNU package descriptors from the Womb.
- (official-gnu-packages))
-
-(define gnus
- ;; GNU packages available in the distro.
- (let ((lookup (lambda (p)
- (find (lambda (descriptor)
- (equal? (gnu-package-name descriptor)
- (package-name p)))
- official))))
- (fold-packages (lambda (package result)
- (or (and=> (lookup package)
- (cut alist-cons package <> result))
- result))
- '())))
-
-(define (escape-quotes str)
- "Replace any quote character in STR by an escaped quote character."
- (list->string
- (string-fold-right (lambda (chr result)
- (match chr
- (#\" (cons* #\\ #\"result))
- (_ (cons chr result))))
- '()
- str)))
-
-;; Iterate over GNU packages. Report those whose synopsis defers from that
-;; found upstream.
-(for-each (match-lambda
- ((package . descriptor)
- (let ((upstream (gnu-package-doc-summary descriptor))
- (downstream (package-synopsis package))
- (loc (or (package-field-location package 'synopsis)
- (package-location package))))
- (unless (and upstream (string=? upstream downstream))
- (format (guix-warning-port)
- "~a: ~a: proposed synopsis: ~s~%"
- (location->string loc) (package-name package)
- upstream)))
-
- (let ((upstream (gnu-package-doc-description descriptor))
- (downstream (package-description package))
- (loc (or (package-field-location package 'description)
- (package-location package))))
- (when (and upstream
- (not (string=? (fill-paragraph upstream 100)
- (fill-paragraph downstream 100))))
- (format (guix-warning-port)
- "~a: ~a: proposed description:~% \"~a\"~%"
- (location->string loc) (package-name package)
- (fill-paragraph (escape-quotes upstream) 77 7))))))
- gnus)
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm
index 237709848f..facc2bf60b 100644
--- a/guix/scripts/lint.scm
+++ b/guix/scripts/lint.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -219,6 +220,61 @@ line."
"file names of patches should start with the package name"
'patches))))
+(define (escape-quotes str)
+ "Replace any quote character in STR by an escaped quote character."
+ (list->string
+ (string-fold-right (lambda (chr result)
+ (match chr
+ (#\" (cons* #\\ #\"result))
+ (_ (cons chr result))))
+ '()
+ str)))
+
+(define official-gnu-packages*
+ (memoize
+ (lambda ()
+ "A memoizing version of 'official-gnu-packages' that returns the empty
+list when something goes wrong, such as a networking issue."
+ (let ((gnus (false-if-exception (official-gnu-packages))))
+ (or gnus '())))))
+
+(define (check-gnu-synopsis+description package)
+ "Make sure that, if PACKAGE is a GNU package, it uses the synopsis and
+descriptions maintained upstream."
+ (match (find (lambda (descriptor)
+ (string=? (gnu-package-name descriptor)
+ (package-name package)))
+ (official-gnu-packages*))
+ (#f ;not a GNU package, so nothing to do
+ #t)
+ (descriptor ;a genuine GNU package
+ (let ((upstream (gnu-package-doc-summary descriptor))
+ (downstream (package-synopsis package))
+ (loc (or (package-field-location package 'synopsis)
+ (package-location package))))
+ (unless (and upstream (string=? upstream downstream))
+ (format (guix-warning-port)
+ "~a: ~a: proposed synopsis: ~s~%"
+ (location->string loc) (package-full-name package)
+ upstream)))
+
+ (let ((upstream (gnu-package-doc-description descriptor))
+ (downstream (package-description package))
+ (loc (or (package-field-location package 'description)
+ (package-location package))))
+ (when (and upstream
+ (not (string=? (fill-paragraph upstream 100)
+ (fill-paragraph downstream 100))))
+ (format (guix-warning-port)
+ "~a: ~a: proposed description:~% \"~a\"~%"
+ (location->string loc) (package-full-name package)
+ (fill-paragraph (escape-quotes upstream) 77 7)))))))
+
+
+;;;
+;;; List of checkers.
+;;;
+
(define %checkers
(list
(lint-checker
@@ -226,6 +282,10 @@ line."
(description "Validate package descriptions")
(check check-description-style))
(lint-checker
+ (name "gnu-description")
+ (description "Validate synopsis & description of GNU packages")
+ (check check-gnu-synopsis+description))
+ (lint-checker
(name "inputs-should-be-native")
(description "Identify inputs that should be native inputs")
(check check-inputs-should-be-native))