aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/gnu-maintenance.scm34
1 files changed, 31 insertions, 3 deletions
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index 93645367e9..910270fab1 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -321,13 +321,18 @@ pairs. Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\").
#:key
(server "ftp.gnu.org")
(directory (string-append "/gnu/" project))
+ (keep-file? (const #t))
(file->signature (cut string-append <> ".sig"))
(ftp-open ftp-open) (ftp-close ftp-close))
"Return an <upstream-source> for the latest release of PROJECT on SERVER
under DIRECTORY, or #f. Use FTP-OPEN and FTP-CLOSE to open (resp. close) FTP
-connections; this can be useful to reuse connections. FILE->SIGNATURE must be
-a procedure; it is passed a source file URL and must return the corresponding
-signature URL, or #f it signatures are unavailable."
+connections; this can be useful to reuse connections.
+
+KEEP-FILE? is a predicate to decide whether to consider a given file (source
+tarball) as a valid candidate based on its name.
+
+FILE->SIGNATURE must be a procedure; it is passed a source file URL and must
+return the corresponding signature URL, or #f it signatures are unavailable."
(define (latest a b)
(if (version>? a b) a b))
@@ -382,6 +387,7 @@ signature URL, or #f it signatures are unavailable."
(releases (filter-map (match-lambda
((file 'file . _)
(and (release-file? project file)
+ (keep-file? file)
(file->source directory file)))
(_ #f))
entries)))
@@ -467,6 +473,22 @@ elpa.gnu.org, and all the GNOME packages."
(define (latest-gnome-release package)
"Return the latest release of PACKAGE, the name of a GNOME package."
+ (define %not-dot
+ (char-set-complement (char-set #\.)))
+
+ (define (even-minor-version? version)
+ (match (string-tokenize (version-major+minor version)
+ %not-dot)
+ (((= string->number major) (= string->number minor))
+ (even? minor))
+ (_
+ #t))) ;cross fingers
+
+ (define (even-numbered-tarball? file)
+ (let-values (((name version) (gnu-package-name->name+version file)))
+ (and version
+ (even-minor-version? version))))
+
(false-if-ftp-error
(latest-ftp-release package
#:server "ftp.gnome.org"
@@ -475,6 +497,12 @@ elpa.gnu.org, and all the GNOME packages."
("gconf" "GConf")
(x x)))
+
+ ;; <https://www.gnome.org/gnome-3/source/> explains
+ ;; that odd minor version numbers represent development
+ ;; releases, which we are usually not interested in.
+ #:keep-file? even-numbered-tarball?
+
;; ftp.gnome.org provides no signatures, only
;; checksums.
#:file->signature (const #f))))