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
|
@ -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
|
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!
|
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,
|
Sometimes the upstream name differs from the package name used in Guix,
|
||||||
and @command{guix refresh} needs a little help. Most updaters honor the
|
and @command{guix refresh} needs a little help. Most updaters honor the
|
||||||
@code{upstream-name} property in package definitions, which can be used
|
@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
|
The command above lists a set of packages that could be built to check
|
||||||
for compatibility with an upgraded @code{flex} package.
|
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:
|
The following options can be used to customize GnuPG operation:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||||
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
|
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
|
||||||
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@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.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
#:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
#:use-module (ice-9 vlist)
|
#:use-module (ice-9 vlist)
|
||||||
#:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
|
#:use-module (ice-9 threads) ; par-for-each
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-11)
|
#:use-module (srfi srfi-11)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
@ -88,6 +90,12 @@
|
||||||
(option '(#\l "list-dependent") #f #f
|
(option '(#\l "list-dependent") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'list-dependent? #t 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
|
(option '("keyring") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
|
@ -140,6 +148,10 @@ specified with `--select'.\n"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-l, --list-dependent list top-level dependent packages that would need to
|
-l, --list-dependent list top-level dependent packages that would need to
|
||||||
be rebuilt as a result of upgrading PACKAGE..."))
|
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)
|
(newline)
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
--keyring=FILE use FILE as the keyring of upstream OpenPGP keys"))
|
--keyring=FILE use FILE as the keyring of upstream OpenPGP keys"))
|
||||||
|
@ -323,6 +335,43 @@ dependent packages are rebuilt: ~{~a~^ ~}~%"
|
||||||
(map full-name covering))))
|
(map full-name covering))))
|
||||||
(return #t))))
|
(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.
|
;;; Manifest.
|
||||||
|
@ -402,7 +451,9 @@ update would trigger a complete rebuild."
|
||||||
(let* ((opts (parse-options))
|
(let* ((opts (parse-options))
|
||||||
(update? (assoc-ref opts 'update?))
|
(update? (assoc-ref opts 'update?))
|
||||||
(updaters (options->updaters opts))
|
(updaters (options->updaters opts))
|
||||||
|
(recursive? (assoc-ref opts 'recursive?))
|
||||||
(list-dependent? (assoc-ref opts 'list-dependent?))
|
(list-dependent? (assoc-ref opts 'list-dependent?))
|
||||||
|
(list-transitive? (assoc-ref opts 'list-transitive?))
|
||||||
(key-download (assoc-ref opts 'key-download))
|
(key-download (assoc-ref opts 'key-download))
|
||||||
|
|
||||||
;; Warn about missing updaters when a package is explicitly given on
|
;; Warn about missing updaters when a package is explicitly given on
|
||||||
|
@ -441,6 +492,10 @@ update would trigger a complete rebuild."
|
||||||
(cond
|
(cond
|
||||||
(list-dependent?
|
(list-dependent?
|
||||||
(list-dependents packages))
|
(list-dependents packages))
|
||||||
|
(list-transitive?
|
||||||
|
(list-transitive packages))
|
||||||
|
(recursive?
|
||||||
|
(refresh-recursive packages))
|
||||||
(update?
|
(update?
|
||||||
(parameterize ((%openpgp-key-server
|
(parameterize ((%openpgp-key-server
|
||||||
(or (assoc-ref opts 'key-server)
|
(or (assoc-ref opts 'key-server)
|
||||||
|
|
Loading…
Reference in New Issue