diff options
-rw-r--r-- | guix/import/kde.scm | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/guix/import/kde.scm b/guix/import/kde.scm index 6873418d62..8b501ec03d 100644 --- a/guix/import/kde.scm +++ b/guix/import/kde.scm @@ -28,6 +28,7 @@ #:use-module (ice-9 match) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) + #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (web uri) @@ -149,38 +150,47 @@ Output: (string-join (map version->pattern directory-parts) "/") "/")))) -(define (latest-kde-release package) +(define* (latest-kde-release package #:key (version #f)) "Return the latest release of PACKAGE, a KDE package, or #f if it could not be determined." + + (define (find-latest-archive-version archives) + (fold (lambda (file1 file2) + (if (and file2 + (version>? (tarball-sans-extension (basename file2)) + (tarball-sans-extension (basename file1)))) + file2 + file1)) + #f + archives)) + (let* ((uri (string->uri (origin-uri (package-source package)))) (path-rx (uri->kde-path-pattern uri)) (name (package-upstream-name package)) (files (download.kde.org-files)) + ;; select archives for this package (relevant (filter (lambda (file) (and (regexp-exec path-rx file) (release-file? name (basename file)))) - files))) - (match (sort relevant (lambda (file1 file2) - (version>? (tarball-sans-extension - (basename file1)) - (tarball-sans-extension - (basename file2))))) - ((and tarballs (reference _ ...)) - (let* ((version (tarball->version reference)) - (tarballs (filter (lambda (file) - (string=? (tarball-sans-extension - (basename file)) - (tarball-sans-extension - (basename reference)))) - tarballs))) - (upstream-source - (package name) - (version version) - (urls (map (lambda (file) - (string-append "mirror://kde/" file)) - tarballs))))) - (() - #f)))) + files)) + ;; find latest version + (version (or version + (and (not (null? relevant)) + (tarball->version (find-latest-archive-version relevant))))) + ;; find archives matching this version + (archives (filter (lambda (file) + (string=? version (tarball->version file))) + relevant))) + (match archives + (() #f) + (_ + (upstream-source + (package name) + (version version) + (urls (map (lambda (file) + (string-append "mirror://kde/" file)) + archives))))))) + (define %kde-updater (upstream-updater |