packages: Add 'specifications->manifest'.

* gnu/packages.scm (specifications->manifest): New procedure.
* doc/guix.texi (Invoking guix package): Change example from using
'(compose list specification->package+output)' to using
'specifications->manifest'.
This commit is contained in:
Ludovic Courtès 2017-06-11 23:05:23 +02:00
parent c580ff6724
commit c08ea55e7e
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 15 additions and 6 deletions

View file

@ -1742,18 +1742,17 @@ of packages:
(list guile-2.0 "debug")))
@end example
@findex specification->package+output
@findex specifications->manifest
In this example we have to know which modules define the @code{emacs}
and @code{guile-2.0} variables to provide the right
@code{use-package-modules} line, which can be cumbersome. We can
instead provide regular package specifications and let
@code{specification->package-output} look up the corresponding package
@code{specifications->manifest} look up the corresponding package
objects, like this:
@example
(packages->manifest
(map (compose list specification->package+output)
'("emacs" "guile@@2.0" "guile@@2.0:debug")))
(specifications->manifest
'("emacs" "guile@@2.2" "guile@@2.2:debug"))
@end example
@item --roll-back

View file

@ -29,6 +29,7 @@ (define-module (gnu packages)
#:use-module ((guix build utils)
#:select ((package-name->name+version
. hyphen-separated-name->name+version)))
#:autoload (guix profiles) (packages->manifest)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
@ -53,7 +54,8 @@ (define-module (gnu packages)
find-newest-available-packages
specification->package
specification->package+output))
specification->package+output
specifications->manifest))
;;; Commentary:
;;;
@ -278,3 +280,11 @@ (define* (specification->package+output spec #:optional (output "out"))
(leave (G_ "package `~a' lacks output `~a'~%")
(package-full-name package)
sub-drv))))))
(define (specifications->manifest specs)
"Given SPECS, a list of specifications such as \"emacs@25.2\" or
\"guile:debug\", return a profile manifest."
;; This procedure exists mostly so users of 'guix package -m' don't have to
;; fiddle with multiple-value returns.
(packages->manifest
(map (compose list specification->package+output) specs)))