import: KDE updater finds packages even in sub-directory.
Fixes <http://issues.guix.gnu.org/issue/30345> and finally fixes <http://issues.guix.gnu.org/issue/25020>. Formerly packages living in a path like /stable/frameworks/5.60/portingAids/kross-5.60.0.tar.xz have not been found. * guix/import/kde.scm (uri->kde-path-pattern): New procedure. (latest-kde-release): Use pattern to search for file.
This commit is contained in:
parent
d1dce0c363
commit
4eb69bf0d3
|
@ -117,15 +117,47 @@ CACHE."
|
||||||
(close-port port)
|
(close-port port)
|
||||||
files))
|
files))
|
||||||
|
|
||||||
|
(define (uri->kde-path-pattern uri)
|
||||||
|
"Build a regexp from the package's URI suitable for matching the package
|
||||||
|
path version-agnostic.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
Input:
|
||||||
|
mirror://kde//stable/frameworks/5.55/portingAids/kross-5.55.0.zip
|
||||||
|
Output:
|
||||||
|
//stable/frameworks/[^/]+/portingAids/
|
||||||
|
"
|
||||||
|
|
||||||
|
(define version-regexp
|
||||||
|
;; regexp for matching versions as used in the ld-lR file
|
||||||
|
(make-regexp
|
||||||
|
(string-join '("^([0-9]+\\.)+[0-9]+-?" ;; 5.12.90, 4.2.0-preview
|
||||||
|
"^[0-9]+$" ;; 20031002
|
||||||
|
".*-([0-9]+\\.)+[0-9]+$") ;; kdepim-4.6.1
|
||||||
|
"|")))
|
||||||
|
|
||||||
|
(define (version->pattern part)
|
||||||
|
;; If a path element might be a version, replace it by a catch-all part
|
||||||
|
(if (regexp-exec version-regexp part)
|
||||||
|
"[^/]+"
|
||||||
|
part))
|
||||||
|
|
||||||
|
(let* ((path (uri-path uri))
|
||||||
|
(directory-parts (string-split (dirname path) #\/)))
|
||||||
|
(make-regexp
|
||||||
|
(string-append
|
||||||
|
(string-join (map version->pattern directory-parts) "/")
|
||||||
|
"/"))))
|
||||||
|
|
||||||
(define (latest-kde-release package)
|
(define (latest-kde-release package)
|
||||||
"Return the latest release of PACKAGE, a KDE package, or #f if it could
|
"Return the latest release of PACKAGE, a KDE package, or #f if it could
|
||||||
not be determined."
|
not be determined."
|
||||||
(let* ((uri (string->uri (origin-uri (package-source package))))
|
(let* ((uri (string->uri (origin-uri (package-source package))))
|
||||||
(directory (dirname (dirname (uri-path uri))))
|
(path-rx (uri->kde-path-pattern uri))
|
||||||
(name (package-upstream-name package))
|
(name (package-upstream-name package))
|
||||||
(files (download.kde.org-files))
|
(files (download.kde.org-files))
|
||||||
(relevant (filter (lambda (file)
|
(relevant (filter (lambda (file)
|
||||||
(and (string-prefix? directory file)
|
(and (regexp-exec path-rx file)
|
||||||
(release-file? name (basename file))))
|
(release-file? name (basename file))))
|
||||||
files)))
|
files)))
|
||||||
(match (sort relevant (lambda (file1 file2)
|
(match (sort relevant (lambda (file1 file2)
|
||||||
|
|
Loading…
Reference in New Issue