~ruther/guix-local

adf0c531a845fb03c92e1f28e26e5c31adb95e4a — Efraim Flashner 8 years ago c723271
guix: lint: Add checker for new upstream versions.

* guix/scripts/lint.scm (check-for-updates): New procedure.
(%checkers): Add it.
* guix/scripts/refresh.scm (importer-modules, %updaters): Move
from here ...
* guix/upstream.scm: ... to here.
3 files changed, 36 insertions(+), 19 deletions(-)

M guix/scripts/lint.scm
M guix/scripts/refresh.scm
M guix/upstream.scm
M guix/scripts/lint.scm => guix/scripts/lint.scm +17 -0
@@ 33,6 33,7 @@
  #:use-module (guix licenses)
  #:use-module (guix records)
  #:use-module (guix ui)
  #:use-module (guix upstream)
  #:use-module (guix utils)
  #:use-module (guix memoization)
  #:use-module (guix scripts)


@@ 73,6 74,7 @@
            check-mirror-url
            check-license
            check-vulnerabilities
            check-for-updates
            check-formatting
            run-checkers



@@ 826,6 828,17 @@ from ~s: ~a (~s)~%")
                                 (string-join (map vulnerability-id unpatched)
                                              ", ")))))))))

(define (check-for-updates package)
  "Check if there is an update available for PACKAGE."
  (match (package-latest-release* package (force %updaters))
    ((? upstream-source? source)
     (when (version>? (upstream-source-version source)
                      (package-version package))
       (emit-warning package
                     (format #f (G_ "can be upgraded to ~a~%")
                             (upstream-source-version source)))))
    (#f #f))) ; cannot find newer upstream release


;;;
;;; Source code formatting.


@@ 992,6 1005,10 @@ or a list thereof")
 (CVE) database")
     (check       check-vulnerabilities))
   (lint-checker
     (name        'refresh)
     (description "Check the package for new upstream releases")
     (check       check-for-updates))
   (lint-checker
     (name        'formatting)
     (description "Look for formatting issues in the source")
     (check       check-formatting))))

M guix/scripts/refresh.scm => guix/scripts/refresh.scm +1 -19
@@ 30,7 30,6 @@
  #:use-module (guix packages)
  #:use-module (guix profiles)
  #:use-module (guix upstream)
  #:use-module (guix discovery)
  #:use-module (guix graph)
  #:use-module (guix scripts graph)
  #:use-module (guix monads)


@@ 46,8 45,7 @@
  #:use-module (srfi srfi-26)
  #:use-module (srfi srfi-37)
  #:use-module (ice-9 binary-ports)
  #:export (guix-refresh
            %updaters))
  #:export (guix-refresh))


;;;


@@ 162,22 160,6 @@ specified with `--select'.\n"))
;;; Updates.
;;;

(define (importer-modules)
  "Return the list of importer modules."
  (cons (resolve-interface '(guix gnu-maintenance))
        (all-modules (map (lambda (entry)
                            `(,entry . "guix/import"))
                          %load-path))))

(define %updaters
  ;; The list of publically-known updaters.
  (delay (fold-module-public-variables (lambda (obj result)
                                         (if (upstream-updater? obj)
                                             (cons obj result)
                                             result))
                                       '()
                                       (importer-modules))))

(define (lookup-updater-by-name name)
  "Return the updater called NAME."
  (or (find (lambda (updater)

M guix/upstream.scm => guix/upstream.scm +18 -0
@@ 20,6 20,7 @@
(define-module (guix upstream)
  #:use-module (guix records)
  #:use-module (guix utils)
  #:use-module (guix discovery)
  #:use-module ((guix download)
                #:select (download-to-store))
  #:use-module (guix gnupg)


@@ 55,6 56,7 @@
            upstream-updater-predicate
            upstream-updater-latest

            %updaters
            lookup-updater

            download-tarball


@@ 146,6 148,22 @@ correspond to the same version."
  (pred        upstream-updater-predicate)
  (latest      upstream-updater-latest))

(define (importer-modules)
  "Return the list of importer modules."
  (cons (resolve-interface '(guix gnu-maintenance))
        (all-modules (map (lambda (entry)
                            `(,entry . "guix/import"))
                          %load-path))))

(define %updaters
  ;; The list of publically-known updaters.
  (delay (fold-module-public-variables (lambda (obj result)
                                         (if (upstream-updater? obj)
                                             (cons obj result)
                                             result))
                                       '()
                                       (importer-modules))))

(define (lookup-updater package updaters)
  "Return an updater among UPDATERS that matches PACKAGE, or #f if none of
them matches."