From patchwork Sat Mar 13 21:46:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 27685 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 5870527BC55; Sat, 13 Mar 2021 21:47:19 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 3715627BC52 for ; Sat, 13 Mar 2021 21:47:18 +0000 (GMT) Received: from localhost ([::1]:46696 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lLC6P-0005Ma-EX for patchwork@mira.cbaines.net; Sat, 13 Mar 2021 16:47:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44198) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLC6B-00055u-T7 for guix-patches@gnu.org; Sat, 13 Mar 2021 16:47:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:49303) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lLC6B-00034s-M6 for guix-patches@gnu.org; Sat, 13 Mar 2021 16:47:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lLC6B-0000mO-Km for guix-patches@gnu.org; Sat, 13 Mar 2021 16:47:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#47126] [PATCH 4/7] gnu-maintenance: 'latest-html-release' can determine signature file name. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 13 Mar 2021 21:47:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47126 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 47126@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 47126-submit@debbugs.gnu.org id=B47126.16156720012919 (code B ref 47126); Sat, 13 Mar 2021 21:47:03 +0000 Received: (at 47126) by debbugs.gnu.org; 13 Mar 2021 21:46:41 +0000 Received: from localhost ([127.0.0.1]:60840 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lLC5p-0000ks-8t for submit@debbugs.gnu.org; Sat, 13 Mar 2021 16:46:41 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54488) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lLC5j-0000jo-1f for 47126@debbugs.gnu.org; Sat, 13 Mar 2021 16:46:35 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42782) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lLC5d-0002ra-Ck; Sat, 13 Mar 2021 16:46:29 -0500 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=39284 helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lLC5c-0004wi-DF; Sat, 13 Mar 2021 16:46:29 -0500 From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Sat, 13 Mar 2021 22:46:17 +0100 Message-Id: <20210313214620.28186-4-ludo@gnu.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210313214620.28186-1-ludo@gnu.org> References: <20210313214620.28186-1-ludo@gnu.org> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * guix/gnu-maintenance.scm (latest-html-release): #:file->signature defaults to #f. [file->signature/guess]: New procedure. [url->release]: Use it when FILE->SIGNATURE is #f. Introduce 'links' variable. (url-prefix-rewrite): Check whether URL is true before calling 'string-prefix?'. (latest-savannah-release): Adjust comment about detached signatures. --- guix/gnu-maintenance.scm | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index a8b24fa336..3bffa4d11e 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -470,16 +470,29 @@ hosted on ftp.gnu.org, or not under that name (this is the case for #:key (base-url "https://kernel.org/pub") (directory (string-append "/" package)) - (file->signature (cut string-append <> ".sig"))) + file->signature) "Return an for the latest release of PACKAGE (a string) on SERVER under DIRECTORY, or #f. BASE-URL should be the URL of an HTML page, typically a directory listing as found on 'https://kernel.org/pub'. -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." - (let* ((uri (string->uri (string-append base-url directory "/"))) - (port (http-fetch/cached uri #:ttl 3600)) - (sxml (html->sxml port))) +When FILE->SIGNATURE is omitted or #f, guess the detached signature file name, +if any. Otherwise, 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." + (let* ((uri (string->uri (string-append base-url directory "/"))) + (port (http-fetch/cached uri #:ttl 3600)) + (sxml (html->sxml port)) + (links (delete-duplicates (html-links sxml)))) + (define (file->signature/guess url) + (let ((base (basename url))) + (any (lambda (link) + (any (lambda (extension) + (and (string=? (string-append base extension) + (basename link)) + (string-append url extension))) + '(".asc" ".sig" ".sign"))) + links))) + (define (url->release url) (let* ((base (basename url)) (url (if (string=? base url) @@ -495,10 +508,10 @@ return the corresponding signature URL, or #f it signatures are unavailable." (version version) (urls (list url)) (signature-urls - (list (file->signature url)))))))) + (list ((or file->signature file->signature/guess) url)))))))) (define candidates - (filter-map url->release (html-links sxml))) + (filter-map url->release links)) (close-port port) (match candidates @@ -614,7 +627,7 @@ releases are on gnu.org." (define (url-prefix-rewrite old new) "Return a one-argument procedure that rewrites URL prefix OLD to NEW." (lambda (url) - (if (string-prefix? old url) + (if (and url (string-prefix? old url)) (string-append new (string-drop url (string-length old))) url))) @@ -646,9 +659,8 @@ releases are on gnu.org." (directory (dirname (uri-path uri))) (rewrite (url-prefix-rewrite %savannah-base "mirror://savannah"))) - ;; Note: We use the default 'file->signature', which adds ".sig", but not - ;; all projects on Savannah follow that convention: some use ".asc" and - ;; perhaps some lack signatures altogether. + ;; Note: We use the default 'file->signature', which adds ".sig", ".asc", + ;; or whichever detached signature naming scheme PACKAGE uses. (and=> (latest-html-release package #:base-url %savannah-base #:directory directory)