summaryrefslogtreecommitdiff
path: root/guix/gnu-maintenance.scm
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2022-09-01 11:01:48 +0200
committerLudovic Courtès <ludo@gnu.org>2022-09-26 23:29:36 +0200
commitfc5c4ce4ec2ecf6b7d9e227617777d8dd10b903a (patch)
treefbcbbeb278b1394c3fa5b64e5a10f28fd3738ca3 /guix/gnu-maintenance.scm
parentb6274a20e8e99fa6287264289da42ed364fc976c (diff)
downloadguix-patches-fc5c4ce4ec2ecf6b7d9e227617777d8dd10b903a.tar
guix-patches-fc5c4ce4ec2ecf6b7d9e227617777d8dd10b903a.tar.gz
lint: Extract logic of 'check-mirror-url'.
It will be useful for fixing <https://issues.guix.gnu.org/57477>. * guix/lint.scm (check-mirror-url): Extract mirror://-constructing code to ... * guix/gnu-maintenance.scm (uri-mirror-rewrite): ... here, tweaking the API and implementation in anticipation of future users. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'guix/gnu-maintenance.scm')
-rw-r--r--guix/gnu-maintenance.scm21
1 files changed, 21 insertions, 0 deletions
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index 1ffa408666..20e3bc1cba 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -33,6 +33,8 @@
#:use-module (rnrs io ports)
#:use-module (system foreign)
#:use-module ((guix http-client) #:hide (open-socket-for-uri))
+ ;; not required in many cases, so autoloaded to reduce start-up costs.
+ #:autoload (guix download) (%mirrors)
#:use-module (guix ftp-client)
#:use-module (guix utils)
#:use-module (guix memoization)
@@ -58,6 +60,8 @@
find-package
gnu-package?
+ uri-mirror-rewrite
+
release-file?
releases
latest-release
@@ -658,6 +662,23 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org."
(string-append new (string-drop url (string-length old)))
url)))
+(define (uri-mirror-rewrite uri)
+ "Rewrite URI to a mirror:// URI if possible, or return URI unmodified."
+ (if (string-prefix? "mirror://" uri)
+ uri ;nothing to do, it's already a mirror URI
+ (let loop ((mirrors %mirrors))
+ (match mirrors
+ (()
+ uri)
+ (((mirror-id mirror-urls ...) rest ...)
+ (match (find (cut string-prefix? <> uri) mirror-urls)
+ (#f
+ (loop rest))
+ (prefix
+ (format #f "mirror://~a/~a"
+ mirror-id
+ (string-drop uri (string-length prefix))))))))))
+
(define (adjusted-upstream-source source rewrite-url)
"Rewrite URLs in SOURCE by apply REWRITE-URL to each of them."
(upstream-source