diff options
-rw-r--r-- | gnu/packages.scm | 36 | ||||
-rw-r--r-- | guix/scripts/archive.scm | 4 | ||||
-rw-r--r-- | guix/scripts/package.scm | 36 |
3 files changed, 38 insertions, 38 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm index 9eb4877be8..6e46a890bb 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -51,7 +51,8 @@ check-package-freshness - specification->package)) + specification->package + specification->package+output)) ;;; Commentary: ;;; @@ -418,3 +419,36 @@ present, return the preferred newest version." (leave (_ "~A: package not found for version ~a~%") name version) (leave (_ "~A: unknown package~%") name)))))) + +(define* (specification->package+output spec #:optional (output "out")) + "Return the package and output specified by SPEC, or #f and #f; SPEC may +optionally contain a version number and an output name, as in these examples: + + guile + guile-2.0.9 + guile:debug + guile-2.0.9:debug + +If SPEC does not specify a version number, return the preferred newest +version; if SPEC does not specify an output, return OUTPUT." + (define (ensure-output p sub-drv) + (if (member sub-drv (package-outputs p)) + sub-drv + (leave (_ "package `~a' lacks output `~a'~%") + (package-full-name p) + sub-drv))) + + (let-values (((name version sub-drv) + (package-specification->name+version+output spec output))) + (match (find-best-packages-by-name name version) + ((p) + (values p (ensure-output p sub-drv))) + ((p p* ...) + (warning (_ "ambiguous package specification `~a'~%") + spec) + (warning (_ "choosing ~a from ~a~%") + (package-full-name p) + (location->string (package-location p))) + (values p (ensure-output p sub-drv))) + (() + (leave (_ "~a: package not found~%") spec))))) diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm index ea6801a6eb..ab2fc46c31 100644 --- a/guix/scripts/archive.scm +++ b/guix/scripts/archive.scm @@ -27,6 +27,8 @@ #:use-module (guix ui) #:use-module (guix pki) #:use-module (guix pk-crypto) + #:use-module (guix scripts build) + #:use-module (gnu packages) #:use-module (ice-9 match) #:use-module (ice-9 format) #:use-module (ice-9 rdelim) @@ -34,8 +36,6 @@ #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (srfi srfi-37) - #:use-module (guix scripts build) - #:use-module (guix scripts package) #:use-module (rnrs io ports) #:export (guix-archive)) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index d9f38fb8bc..56a6e2db64 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -47,8 +47,7 @@ #:use-module (gnu packages base) #:use-module (gnu packages guile) #:use-module ((gnu packages bootstrap) #:select (%bootstrap-guile)) - #:export (specification->package+output - switch-to-generation + #:export (switch-to-generation switch-to-previous-generation roll-back delete-generation @@ -324,39 +323,6 @@ similar." (primitive-_exit 0) (apply throw args))))) -(define* (specification->package+output spec #:optional (output "out")) - "Return the package and output specified by SPEC, or #f and #f; SPEC may -optionally contain a version number and an output name, as in these examples: - - guile - guile-2.0.9 - guile:debug - guile-2.0.9:debug - -If SPEC does not specify a version number, return the preferred newest -version; if SPEC does not specify an output, return OUTPUT." - (define (ensure-output p sub-drv) - (if (member sub-drv (package-outputs p)) - sub-drv - (leave (_ "package `~a' lacks output `~a'~%") - (package-full-name p) - sub-drv))) - - (let-values (((name version sub-drv) - (package-specification->name+version+output spec output))) - (match (find-best-packages-by-name name version) - ((p) - (values p (ensure-output p sub-drv))) - ((p p* ...) - (warning (_ "ambiguous package specification `~a'~%") - spec) - (warning (_ "choosing ~a from ~a~%") - (package-full-name p) - (location->string (package-location p))) - (values p (ensure-output p sub-drv))) - (() - (leave (_ "~a: package not found~%") spec))))) - (define (upgradeable? name current-version current-path) "Return #t if there's a version of package NAME newer than CURRENT-VERSION, or if the newest available version is equal to CURRENT-VERSION but would have |