summaryrefslogtreecommitdiff
path: root/guix/scripts
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 /guix/scripts
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'.
Diffstat (limited to 'guix/scripts')
-rw-r--r--guix/scripts/lint.scm60
1 files changed, 60 insertions, 0 deletions
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))