packages: Allow package lookups with version prefixes.
* gnu/packages.scm (find-packages-by-name): Sort MATCHING according to 'version>?'. Use 'string-prefix?' instead of 'string=?' to compare against VERSION. * doc/guix.texi (Invoking guix package): Add example and explanation.
This commit is contained in:
parent
e7bf0e4465
commit
724311a26b
|
@ -962,7 +962,10 @@ Install the specified @var{package}s.
|
||||||
|
|
||||||
Each @var{package} may specify either a simple package name, such as
|
Each @var{package} may specify either a simple package name, such as
|
||||||
@code{guile}, or a package name followed by a hyphen and version number,
|
@code{guile}, or a package name followed by a hyphen and version number,
|
||||||
such as @code{guile-1.8.8}. If no version number is specified, the
|
such as @code{guile-1.8.8} or simply @code{guile-1.8} (in the latter
|
||||||
|
case, the newest version prefixed by @code{1.8} is selected.)
|
||||||
|
|
||||||
|
If no version number is specified, the
|
||||||
newest available version will be selected. In addition, @var{package}
|
newest available version will be selected. In addition, @var{package}
|
||||||
may contain a colon, followed by the name of one of the outputs of the
|
may contain a colon, followed by the name of one of the outputs of the
|
||||||
package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
|
package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
|
||||||
|
|
|
@ -211,14 +211,18 @@ same package twice."
|
||||||
(let ((packages (delay
|
(let ((packages (delay
|
||||||
(fold-packages (lambda (p r)
|
(fold-packages (lambda (p r)
|
||||||
(vhash-cons (package-name p) p r))
|
(vhash-cons (package-name p) p r))
|
||||||
vlist-null))))
|
vlist-null)))
|
||||||
|
(version>? (lambda (p1 p2)
|
||||||
|
(version>? (package-version p1) (package-version p2)))))
|
||||||
(lambda* (name #:optional version)
|
(lambda* (name #:optional version)
|
||||||
"Return the list of packages with the given NAME. If VERSION is not #f,
|
"Return the list of packages with the given NAME. If VERSION is not #f,
|
||||||
then only return packages whose version is equal to VERSION."
|
then only return packages whose version is prefixed by VERSION, sorted in
|
||||||
(let ((matching (vhash-fold* cons '() name (force packages))))
|
decreasing version order."
|
||||||
|
(let ((matching (sort (vhash-fold* cons '() name (force packages))
|
||||||
|
version>?)))
|
||||||
(if version
|
(if version
|
||||||
(filter (lambda (package)
|
(filter (lambda (package)
|
||||||
(string=? (package-version package) version))
|
(string-prefix? version (package-version package)))
|
||||||
matching)
|
matching)
|
||||||
matching)))))
|
matching)))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue