scripts: refresh: Allow searching recursively.
* guix/scripts/refresh.scm (refresh-recursive, list-transitive): New procedures. (show-help): Document it. (guix-refresh): Add flags and checks for new options. * doc/guix.texi (Invoking guix refresh): Document new options.
This commit is contained in:
parent
19dd523c99
commit
c39491829a
2 changed files with 87 additions and 0 deletions
|
@ -7392,6 +7392,22 @@ are many packages, though, for which it lacks a method to determine
|
|||
whether a new upstream release is available. However, the mechanism is
|
||||
extensible, so feel free to get in touch with us to add a new method!
|
||||
|
||||
@table @code
|
||||
|
||||
@item --recursive
|
||||
Consider the packages specified, and all the packages upon which they depend.
|
||||
|
||||
@example
|
||||
$ guix refresh --recursive coreutils
|
||||
gnu/packages/acl.scm:35:2: warning: no updater for acl
|
||||
gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
|
||||
gnu/packages/xml.scm:68:2: warning: no updater for expat
|
||||
gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
|
||||
@dots{}
|
||||
@end example
|
||||
|
||||
@end table
|
||||
|
||||
Sometimes the upstream name differs from the package name used in Guix,
|
||||
and @command{guix refresh} needs a little help. Most updaters honor the
|
||||
@code{upstream-name} property in package definitions, which can be used
|
||||
|
@ -7565,6 +7581,22 @@ hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
|
|||
The command above lists a set of packages that could be built to check
|
||||
for compatibility with an upgraded @code{flex} package.
|
||||
|
||||
@table @code
|
||||
|
||||
@item --list-transitive
|
||||
List all the packages which one or more packages depend upon.
|
||||
|
||||
@example
|
||||
$ guix refresh --list-transitive flex
|
||||
flex@2.6.4 depends on the following 25 packages: perl@5.28.0 help2man@1.47.6
|
||||
bison@3.0.5 indent@2.2.10 tar@1.30 gzip@1.9 bzip2@1.0.6 xz@5.2.4 file@5.33 @dote{}
|
||||
@end example
|
||||
|
||||
@end table
|
||||
|
||||
The command above lists a set of packages which, when changed, would cause
|
||||
@code{flex} to be rebuilt.
|
||||
|
||||
The following options can be used to customize GnuPG operation:
|
||||
|
||||
@table @code
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
|
||||
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -40,6 +41,7 @@ (define-module (guix scripts refresh)
|
|||
#:use-module (ice-9 regex)
|
||||
#:use-module (ice-9 vlist)
|
||||
#:use-module (ice-9 format)
|
||||
#:use-module (ice-9 threads) ; par-for-each
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-11)
|
||||
#:use-module (srfi srfi-26)
|
||||
|
@ -88,6 +90,12 @@ (define %options
|
|||
(option '(#\l "list-dependent") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'list-dependent? #t result)))
|
||||
(option '(#\r "recursive") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'recursive? #t result)))
|
||||
(option '("list-transitive") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'list-transitive? #t result)))
|
||||
|
||||
(option '("keyring") #t #f
|
||||
(lambda (opt name arg result)
|
||||
|
@ -140,6 +148,10 @@ (define (show-help)
|
|||
(display (G_ "
|
||||
-l, --list-dependent list top-level dependent packages that would need to
|
||||
be rebuilt as a result of upgrading PACKAGE..."))
|
||||
(display (G_ "
|
||||
-r, --recursive check the PACKAGE and its inputs for upgrades"))
|
||||
(display (G_ "
|
||||
--list-transitive list all the packages that PACKAGE depends on"))
|
||||
(newline)
|
||||
(display (G_ "
|
||||
--keyring=FILE use FILE as the keyring of upstream OpenPGP keys"))
|
||||
|
@ -323,6 +335,43 @@ (define (full-name package)
|
|||
(map full-name covering))))
|
||||
(return #t))))
|
||||
|
||||
(define (refresh-recursive packages)
|
||||
"Check all of the package inputs of PACKAGES for newer upstream versions."
|
||||
(mlet %store-monad ((edges (node-edges %bag-node-type
|
||||
;; Here we don't want the -boot0 packages.
|
||||
(fold-packages cons '()))))
|
||||
(let ((dependent (node-transitive-edges packages edges)))
|
||||
;; par-for-each has an undefined return value, so packages which cause
|
||||
;; errors can be ignored.
|
||||
(par-for-each (lambda (package)
|
||||
(guix-refresh package))
|
||||
(map package-name dependent)))
|
||||
(return #t)))
|
||||
|
||||
(define (list-transitive packages)
|
||||
"List all the packages that would cause PACKAGES to be rebuilt if they are changed."
|
||||
;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE
|
||||
;; because it includes implicit dependencies.
|
||||
(define (full-name package)
|
||||
(string-append (package-name package) "@"
|
||||
(package-version package)))
|
||||
|
||||
(mlet %store-monad ((edges (node-edges %bag-node-type
|
||||
;; Here we don't want the -boot0 packages.
|
||||
(fold-packages cons '()))))
|
||||
(let ((dependent (node-transitive-edges packages edges)))
|
||||
(match packages
|
||||
((x)
|
||||
(format (current-output-port)
|
||||
(G_ "~a depends on the following ~d packages: ~{~a~^ ~}~%.")
|
||||
(full-name x) (length dependent) (map full-name dependent)))
|
||||
(lst
|
||||
(format (current-output-port)
|
||||
(G_ "The following ~d packages \
|
||||
all are dependent packages: ~{~a~^ ~}~%")
|
||||
(length dependent) (map full-name dependent))))
|
||||
(return #t))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Manifest.
|
||||
|
@ -402,7 +451,9 @@ (define core-package?
|
|||
(let* ((opts (parse-options))
|
||||
(update? (assoc-ref opts 'update?))
|
||||
(updaters (options->updaters opts))
|
||||
(recursive? (assoc-ref opts 'recursive?))
|
||||
(list-dependent? (assoc-ref opts 'list-dependent?))
|
||||
(list-transitive? (assoc-ref opts 'list-transitive?))
|
||||
(key-download (assoc-ref opts 'key-download))
|
||||
|
||||
;; Warn about missing updaters when a package is explicitly given on
|
||||
|
@ -441,6 +492,10 @@ (define core-package?
|
|||
(cond
|
||||
(list-dependent?
|
||||
(list-dependents packages))
|
||||
(list-transitive?
|
||||
(list-transitive packages))
|
||||
(recursive?
|
||||
(refresh-recursive packages))
|
||||
(update?
|
||||
(parameterize ((%openpgp-key-server
|
||||
(or (assoc-ref opts 'key-server)
|
||||
|
|
Loading…
Reference in a new issue