From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:8:6d80::]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id cINZA+4pamCpmQAAgWs5BA (envelope-from ) for ; Sun, 04 Apr 2021 23:04:46 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id GKzaOO0pamD6YwAAB5/wlQ (envelope-from ) for ; Sun, 04 Apr 2021 21:04:45 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id B21E436DEB for ; Sun, 4 Apr 2021 23:04:44 +0200 (CEST) Received: from localhost ([::1]:35180 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lT9vH-0002zc-Uu for larch@yhetil.org; Sun, 04 Apr 2021 17:04:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42510) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lT9uc-0002n2-P6 for guix-patches@gnu.org; Sun, 04 Apr 2021 17:04:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:53260) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lT9uc-0000l0-Hz for guix-patches@gnu.org; Sun, 04 Apr 2021 17:04:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lT9uc-0000hZ-EU for guix-patches@gnu.org; Sun, 04 Apr 2021 17:04:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#47597] [PATCH 1/3] gnu-maintenance: Add 'sourceforge' updater. References: <20210404205835.30850-1-ludo@gnu.org> In-Reply-To: <20210404205835.30850-1-ludo@gnu.org> Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 04 Apr 2021 21:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47597 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 47597@debbugs.gnu.org Cc: Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 47597-submit@debbugs.gnu.org id=B47597.16175702182650 (code B ref 47597); Sun, 04 Apr 2021 21:04:02 +0000 Received: (at 47597) by debbugs.gnu.org; 4 Apr 2021 21:03:38 +0000 Received: from localhost ([127.0.0.1]:36569 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lT9uE-0000gf-9M for submit@debbugs.gnu.org; Sun, 04 Apr 2021 17:03:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49456) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lT9uB-0000gD-QT for 47597@debbugs.gnu.org; Sun, 04 Apr 2021 17:03:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45764) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lT9u5-0000V2-Se; Sun, 04 Apr 2021 17:03:30 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=45190 helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lT9u5-00049w-BL; Sun, 04 Apr 2021 17:03:29 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Date: Sun, 4 Apr 2021 23:03:14 +0200 Message-Id: <20210404210316.31198-1-ludo@gnu.org> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1617570284; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=ctJX2Msxay2Q3t5rCywq1Riq/Vgz4ciqNedlTZeSa2I=; b=UQw8h6+xFf3XcIdciTrCuJZ8Rv6Sj1IoRh29nrqTZg1a6wo3uf5qtrZ4MkPxFO5x5veC2o mMHmo9gngf+znqxY8S3U4nCq6dxvhTDZdPVKcFMv8lzSzAyEOffVDYFKxfJ6DH7dSET+II 5QxU1kwpIi8zYcvygA1o6IlSvB3tT9cQuV0XFVBT1ZqjzFcK4zZjUehjQxwcYTEoqmEx4X AOaqqWt5bP/va5os0miZwCM9PN/ym4gveIvYk64Dkjg0fqLI/oIz+9Q3QLGx1vFl+OshhA 1pYzRFMtrgIVb+aeHd3C6F+yKuRCTasuLAEQIbG9kvLYWjugYp/tYsmVykd5vg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1617570284; a=rsa-sha256; cv=none; b=dM1QVN/wr1+UtiMR6WwvSPdsxvLs1dwNI8IaUMEXcZl5yj1PkQMh9pngqayycmLbna/HZW bgTETgOhyyo5p6cFjzGnL8f0KsToa1ItTYbtAzCbqdp5IbTBrEkvNWp+Sv6RYTqNH9VZw3 NZTf/kKfxHxBbkO01PaT9yl35yKgrg7rKFnz3wtSSenH1bXMmVCUbJY7BKuObjmtPL3iDb xceE+ygwlYUpVueunoUPCx08caU5SQ9/HhFVsKbNYLWY3Ubpi4cS13Jrna+lGhD9Fxj9OD R9Io/p3xoEGrGbM8J5bE0HD8RgxN1sQTEhW37qnDhwydZIIMhXhf4BQrZe0AAw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Spam-Score: 2.06 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: B21E436DEB X-Spam-Score: 2.06 X-Migadu-Scanner: scn0.migadu.com X-TUID: 2sny0+4dkv6o This updater currently covers 2.4% of the packages. * guix/gnu-maintenance.scm (latest-sourceforge-release): New procedure. (%sourceforge-updater): New variable. * doc/guix.texi (Invoking guix refresh): Document it. --- doc/guix.texi | 2 ++ guix/gnu-maintenance.scm | 55 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index bada446357..d9ab8090a0 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -11713,6 +11713,8 @@ list of updaters). Currently, @var{updater} may be one of: the updater for GNU packages; @item savannah the updater for packages hosted at @uref{https://savannah.gnu.org, Savannah}; +@item sourceforge +the updater for packages hosted at @uref{https://sourceforge.net, SourceForge}; @item gnome the updater for GNOME packages; @item kde diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index c7972d13a5..79214ae1a0 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -66,6 +66,7 @@ %gnu-updater %gnu-ftp-updater %savannah-updater + %sourceforge-updater %xorg-updater %kernel.org-updater %generic-html-updater)) @@ -660,6 +661,53 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org." #:directory directory) (cut adjusted-upstream-source <> rewrite)))) +(define (latest-sourceforge-release package) + "Return the latest release of PACKAGE." + (define (uri-append uri extension) + ;; Return URI with EXTENSION appended. + (build-uri (uri-scheme uri) + #:host (uri-host uri) + #:path (string-append (uri-path uri) extension))) + + (define (valid-uri? uri) + ;; Return true if URI is reachable. + (catch #t + (lambda () + (case (response-code (http-head uri)) + ((200 302) #t) + (else #f))) + (const #f))) + + (let* ((name (package-upstream-name package)) + (base (string-append "https://sourceforge.net/projects/" + name "/files")) + (url (string-append base "/latest/download")) + (response (catch #t (lambda () (http-head url)) + (const #f)))) + (and response + (= 302 (response-code response)) + (response-location response) + (match (string-tokenize (uri-path (response-location response)) + (char-set-complement (char-set #\/))) + ((_ components ...) + (let* ((path (string-join components "/")) + (url (string-append "mirror://sourceforge/" path))) + (and (release-file? name (basename path)) + + ;; Take the heavy-handed approach of probing 3 additional + ;; URLs. XXX: Would be nicer if this could be avoided. + (let* ((loc (response-location response)) + (sig (any (lambda (extension) + (let ((uri (uri-append loc extension))) + (and (valid-uri? uri) + (string-append url extension)))) + '(".asc" ".sig" ".sign")))) + (upstream-source + (package name) + (version (tarball->version (basename path))) + (urls (list url)) + (signature-urls (and sig (list sig)))))))))))) + (define (latest-xorg-release package) "Return the latest release of PACKAGE." (let ((uri (string->uri (origin-uri (package-source package))))) @@ -774,6 +822,13 @@ the directory containing its source tarball." (pred (url-prefix-predicate "mirror://savannah/")) (latest latest-savannah-release))) +(define %sourceforge-updater + (upstream-updater + (name 'sourceforge) + (description "Updater for packages hosted on sourceforge.net") + (pred (url-prefix-predicate "mirror://sourceforge/")) + (latest latest-sourceforge-release))) + (define %xorg-updater (upstream-updater (name 'xorg) -- 2.31.1