From c08ea55e7ec25261e4596bf6726a83c1ed056b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 11 Jun 2017 23:05:23 +0200 Subject: [PATCH] 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'. --- doc/guix.texi | 9 ++++----- gnu/packages.scm | 12 +++++++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 87aaae8545..83f20c8598 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -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 diff --git a/gnu/packages.scm b/gnu/packages.scm index 57907155fb..5629061788 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -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)))