From 37627ffa89dc318858c14073e6cf238e1f531b36 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 19 Nov 2014 22:52:14 +0100 Subject: 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'. --- guix/scripts/lint.scm | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'guix/scripts') 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 ;;; Copyright © 2014 Eric Bavier +;;; Copyright © 2013, 2014 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -219,12 +220,71 @@ (define (check-patches package) "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 (name "description") (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") -- cgit v1.2.3