diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-11-01 16:57:48 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-11-01 23:21:00 +0100 |
commit | 2876b9892583bc1245d77fd10286025cd8433ede (patch) | |
tree | 38cc9dc2cbb116c0ef3c3e742bb1d432b0bef0e4 /guix/ui.scm | |
parent | cc4ecc2d8869081483feaf47bdcb4a740c7c67f8 (diff) | |
download | gnu-guix-2876b9892583bc1245d77fd10286025cd8433ede.tar gnu-guix-2876b9892583bc1245d77fd10286025cd8433ede.tar.gz |
ui: Factorize package specification parsing.
* guix/ui.scm (package-specification->name+version+output): New
procedure.
* guix/scripts/package.scm (specification->package+output): Use it.
* tests/ui.scm ("package-specification->name+version+output"): New test.
Diffstat (limited to 'guix/ui.scm')
-rw-r--r-- | guix/ui.scm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/guix/ui.scm b/guix/ui.scm index 7f8ed970d4..ddc93f9db4 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -52,6 +52,7 @@ fill-paragraph string->recutils package->recutils + package-specification->name+version+output string->generations string->duration args-fold* @@ -358,6 +359,11 @@ converted to a space; sequences of more than one line break are preserved." ((_ _ chars) (list->string (reverse chars))))) + +;;; +;;; Packages. +;;; + (define (string->recutils str) "Return a version of STR where newlines have been replaced by newlines followed by \"+ \", which makes for a valid multi-line field value in the @@ -472,6 +478,31 @@ following patterns: \"1d\", \"1w\", \"1m\"." (hours->duration (* 24 30) match))) (else #f))) +(define* (package-specification->name+version+output spec + #:optional (output "out")) + "Parse package specification SPEC and return three value: the specified +package name, version number (or #f), and output name (or OUTPUT). 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 +" + (let*-values (((name sub-drv) + (match (string-rindex spec #\:) + (#f (values spec output)) + (colon (values (substring spec 0 colon) + (substring spec (+ 1 colon)))))) + ((name version) + (package-name->name+version name))) + (values name version sub-drv))) + + +;;; +;;; Command-line option processing. +;;; + (define (args-fold* options unrecognized-option-proc operand-proc . seeds) "A wrapper on top of `args-fold' that does proper user-facing error reporting." |