summary refs log tree commit diff
path: root/gnu/packages.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages.scm')
-rw-r--r--gnu/packages.scm12
1 files changed, 8 insertions, 4 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 6ef0fb6de7..9eb4877be8 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -211,14 +211,18 @@ same package twice."
   (let ((packages (delay
                     (fold-packages (lambda (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)
       "Return the list of packages with the given NAME.  If VERSION is not #f,
-then only return packages whose version is equal to VERSION."
-      (let ((matching (vhash-fold* cons '() name (force packages))))
+then only return packages whose version is prefixed by VERSION, sorted in
+decreasing version order."
+      (let ((matching (sort (vhash-fold* cons '() name (force packages))
+                            version>?)))
         (if version
             (filter (lambda (package)
-                      (string=? (package-version package) version))
+                      (string-prefix? version (package-version package)))
                     matching)
             matching)))))