refresh: Support select packages SUBSET by module name.
* guix/scripts/refresh.scm (%options): Support '--select module:NAME'. (show-help): Adjust accordingly. (options->update-specs): Honor the module passed by '--select'. * doc/guix.texi (Invoking guix refresh): Document it.master
parent
5b545763ed
commit
4502de61f2
|
@ -14227,8 +14227,8 @@ $ ./pre-inst-env guix refresh -s non-core -u
|
||||||
|
|
||||||
@item --select=[@var{subset}]
|
@item --select=[@var{subset}]
|
||||||
@itemx -s @var{subset}
|
@itemx -s @var{subset}
|
||||||
Select all the packages in @var{subset}, one of @code{core} or
|
Select all the packages in @var{subset}, one of @code{core}, @code{non-core}
|
||||||
@code{non-core}.
|
or @code{module:@var{name}}.
|
||||||
|
|
||||||
The @code{core} subset refers to all the packages at the core of the
|
The @code{core} subset refers to all the packages at the core of the
|
||||||
distribution---i.e., packages that are used to build ``everything
|
distribution---i.e., packages that are used to build ``everything
|
||||||
|
@ -14241,6 +14241,11 @@ The @code{non-core} subset refers to the remaining packages. It is
|
||||||
typically useful in cases where an update of the core packages would be
|
typically useful in cases where an update of the core packages would be
|
||||||
inconvenient.
|
inconvenient.
|
||||||
|
|
||||||
|
The @code{module:@var{name}} subset refers to all the packages in a
|
||||||
|
specified guile module. The module can be specified as
|
||||||
|
@code{module:guile} or @code{module:(gnu packages guile)}, the former is
|
||||||
|
a shorthand for the later.
|
||||||
|
|
||||||
@item --manifest=@var{file}
|
@item --manifest=@var{file}
|
||||||
@itemx -m @var{file}
|
@itemx -m @var{file}
|
||||||
Select all the packages from the manifest in @var{file}. This is useful to
|
Select all the packages from the manifest in @var{file}. This is useful to
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#:use-module ((guix scripts build) #:select (%standard-build-options))
|
#:use-module ((guix scripts build) #:select (%standard-build-options))
|
||||||
#:use-module (guix store)
|
#:use-module (guix store)
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
|
#:use-module (guix discovery)
|
||||||
#:use-module (guix packages)
|
#:use-module (guix packages)
|
||||||
#:use-module (guix profiles)
|
#:use-module (guix profiles)
|
||||||
#:use-module (guix upstream)
|
#:use-module (guix upstream)
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
#:use-module ((gnu packages commencement) #:select (%final-inputs))
|
#:use-module ((gnu packages commencement) #:select (%final-inputs))
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
|
#:use-module (ice-9 regex)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-9)
|
#:use-module (srfi srfi-9)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
@ -71,8 +73,23 @@
|
||||||
((or "core" "non-core")
|
((or "core" "non-core")
|
||||||
(alist-cons 'select (string->symbol arg)
|
(alist-cons 'select (string->symbol arg)
|
||||||
result))
|
result))
|
||||||
|
((? (cut string-prefix? "module:" <>))
|
||||||
|
(let ((mod (cond
|
||||||
|
;; Shorthand name: "module:guile".
|
||||||
|
((string-match "module:([^\( ]+)$" arg) =>
|
||||||
|
(lambda (m)
|
||||||
|
`(gnu packages ,(string->symbol
|
||||||
|
(match:substring m 1)))))
|
||||||
|
;; Full name : "module:(gnu packages guile)".
|
||||||
|
((string-match "module:\\(([^)]+)\\)$" arg) =>
|
||||||
|
(lambda (m)
|
||||||
|
(map string->symbol
|
||||||
|
(string-split
|
||||||
|
(match:substring m 1) #\space))))
|
||||||
|
(else (leave (G_ "invalid module: ~a~%") arg)))))
|
||||||
|
(alist-cons 'select (cons 'module mod) result)))
|
||||||
(x
|
(x
|
||||||
(leave (G_ "~a: invalid selection; expected `core' or `non-core'~%")
|
(leave (G_ "~a: invalid selection; expected `core', `non-core' or `module:NAME'~%")
|
||||||
arg)))))
|
arg)))))
|
||||||
(option '(#\t "type") #t #f
|
(option '(#\t "type") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
|
@ -141,8 +158,10 @@ specified with `--select'.\n"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-u, --update update source files in place"))
|
-u, --update update source files in place"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-s, --select=SUBSET select all the packages in SUBSET, one of
|
-s, --select=SUBSET select all the packages in SUBSET, one of `core`,
|
||||||
`core' or `non-core'"))
|
`non-core' or `module:NAME' (eg: module:guile)
|
||||||
|
the module can also be fully specified as
|
||||||
|
'module:(gnu packages guile)'"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-m, --manifest=FILE select all the packages from the manifest in FILE"))
|
-m, --manifest=FILE select all the packages from the manifest in FILE"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
|
@ -257,13 +276,20 @@ update would trigger a complete rebuild."
|
||||||
(let ((select? (match (assoc-ref opts 'select)
|
(let ((select? (match (assoc-ref opts 'select)
|
||||||
('core core-package?)
|
('core core-package?)
|
||||||
('non-core (negate core-package?))
|
('non-core (negate core-package?))
|
||||||
(_ (const #t)))))
|
(_ (const #t))))
|
||||||
|
(modules (match (assoc-ref opts 'select)
|
||||||
|
(('module . mod)
|
||||||
|
(list (resolve-interface mod)))
|
||||||
|
(_ (all-modules (%package-module-path)
|
||||||
|
#:warn
|
||||||
|
warn-about-load-error)))))
|
||||||
(map update-spec
|
(map update-spec
|
||||||
(fold-packages (lambda (package result)
|
(fold-packages (lambda (package result)
|
||||||
(if (select? package)
|
(if (select? package)
|
||||||
(keep-newest package result)
|
(keep-newest package result)
|
||||||
result))
|
result))
|
||||||
'()))))
|
'()
|
||||||
|
modules))))
|
||||||
(some ;user-specified packages
|
(some ;user-specified packages
|
||||||
some)))
|
some)))
|
||||||
|
|
||||||
|
|
Reference in New Issue