~ruther/guix-local

c08ea55e7ec25261e4596bf6726a83c1ed056b94 — Ludovic Courtès 8 years ago c580ff6
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'.
2 files changed, 15 insertions(+), 6 deletions(-)

M doc/guix.texi
M gnu/packages.scm
M doc/guix.texi => doc/guix.texi +4 -5
@@ 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

M gnu/packages.scm => gnu/packages.scm +11 -1
@@ 29,6 29,7 @@
  #: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 @@
            find-newest-available-packages

            specification->package
            specification->package+output))
            specification->package+output
            specifications->manifest))

;;; Commentary:
;;;


@@ 278,3 280,11 @@ version; if SPEC does not specify an output, return OUTPUT."
           (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)))