From patchwork Fri Sep 3 15:50:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Xinglu Chen X-Patchwork-Id: 32545 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 790FE27BBE3; Fri, 3 Sep 2021 16:52:19 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,T_DKIM_INVALID, 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 9DE9F27BBE1 for ; Fri, 3 Sep 2021 16:52:18 +0100 (BST) Received: from localhost ([::1]:51314 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mMBUH-0006wC-OA for patchwork@mira.cbaines.net; Fri, 03 Sep 2021 11:52:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMBU3-0006uT-3O for guix-patches@gnu.org; Fri, 03 Sep 2021 11:52:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:34242) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mMBU2-0005cf-Rk for guix-patches@gnu.org; Fri, 03 Sep 2021 11:52:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mMBU2-0007y3-I2 for guix-patches@gnu.org; Fri, 03 Sep 2021 11:52:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#50359] [PATCH] import: Add 'generic-git' updater. Resent-From: Xinglu Chen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 03 Sep 2021 15:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 50359 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 50359@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.163068428430581 (code B ref -1); Fri, 03 Sep 2021 15:52:02 +0000 Received: (at submit) by debbugs.gnu.org; 3 Sep 2021 15:51:24 +0000 Received: from localhost ([127.0.0.1]:45788 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMBTP-0007xA-Ar for submit@debbugs.gnu.org; Fri, 03 Sep 2021 11:51:23 -0400 Received: from lists.gnu.org ([209.51.188.17]:53982) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMBTN-0007x3-TK for submit@debbugs.gnu.org; Fri, 03 Sep 2021 11:51:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMBTM-0006Q2-VL for guix-patches@gnu.org; Fri, 03 Sep 2021 11:51:21 -0400 Received: from h87-96-130-155.cust.a3fiber.se ([87.96.130.155]:58080 helo=mail.yoctocell.xyz) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMBTJ-0004iq-L0 for guix-patches@gnu.org; Fri, 03 Sep 2021 11:51:20 -0400 From: Xinglu Chen DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yoctocell.xyz; s=mail; t=1630684266; bh=cdtrGN9Y8W0hGMyXnMzGssKIL6kIknZ9jKKMhgeCheg=; h=From:To:Subject:Date; b=FwV1KD+rP9LxCUJ7+HnDaOh1f8ePrHqNIdQtltOERgyZRm2C2o9vH9D84sO4ClQ6H J4NWCChfgbAgLHQCFKrBBYNQ1AjtlVgSMIUeUioc93ezzwQ77P5S7U5AtaX0QvpviM QBEz3uekTyR2cezX71GwZRBGeVDi2K7ubxuOgayw= Message-Id: Date: Fri, 03 Sep 2021 17:50:56 +0200 MIME-Version: 1.0 Received-SPF: pass client-ip=87.96.130.155; envelope-from=public@yoctocell.xyz; helo=mail.yoctocell.xyz X-Spam_score_int: 30 X-Spam_score: 3.0 X-Spam_bar: +++ X-Spam_report: (3.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, FROM_SUSPICIOUS_NTLD_FP=1.598, PDS_OTHER_BAD_TLD=1.999, RDNS_DYNAMIC=0.982, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action 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/import/git.scm: New file. * doc/guix.texi (Invoking guix refresh): Document it. * Makefile.am (MODULES): Register it. --- This patch adds a new ‘generic-git’ updater which can check for new tags for package hosted on Git repos. However, it cannot download Git repos and update the package definitions, i.e. ‘guix refresh -u’. There is a pending patch that would add this feature though[1]. ‘guix refresh -L’ now reports Available updaters: […] 94.5% of the packages are covered by these updaters. We are getting close to 100% :-) See it in action! --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guix refresh harmonist scdoc gmnisrv gnu/packages/web.scm:7931:4: warning: no tags were found for package `gmnisrv' gnu/packages/web.scm:7931:4: warning: 'generic-git' updater failed to determine available releases for gmnisrv gnu/packages/man.scm:339:12: scdoc would be upgraded from 1.10.1 to 1.11.1 gnu/packages/games.scm:9433:2: warning: failed to fetch Git repository for package `harmonist' gnu/packages/games.scm:9433:2: warning: 'generic-git' updater failed to determine available releases for harmonist --8<---------------cut here---------------end--------------->8--- [1]: Makefile.am | 1 + doc/guix.texi | 27 ++++++ guix/import/git.scm | 223 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 251 insertions(+) create mode 100644 guix/import/git.scm base-commit: 9540323458de87b0b8aa421e449a4fe27af7c393 diff --git a/Makefile.am b/Makefile.am index 3c79760734..c4d3a456b1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -254,6 +254,7 @@ MODULES = \ guix/import/egg.scm \ guix/import/elpa.scm \ guix/import/gem.scm \ + guix/import/git.scm \ guix/import/github.scm \ guix/import/gnome.scm \ guix/import/gnu.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 36a0c7f5ec..26afb1607a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -11920,6 +11920,33 @@ the updater for @uref{https://launchpad.net, Launchpad} packages. @item generic-html a generic updater that crawls the HTML page where the source tarball of the package is hosted, when applicable. +@item generic-git +a generic updater for packages hosted on Git repositories. It tries to +be smart about parsing Git tag names, but if it is not able to parse the +tag name and compare tags correctly, users can define the following +properties for a package. + +@itemize +@item @code{tag-prefix}: a regular expression for matching a prefix of +the tag name. + +@item @code{tag-suffix}: a regular expression for matching a suffix of +the tag name. + +@item @code{tag-version-delimiter}: a string used as the delimiter in +the tag name for separating the numbers of the version. +@end itemize + +@lisp +(package + (name "foo") + ;; ... + (properties + '((tag-prefix . "^release0-") + (tag-suffix . "[a-z]?$") + (tag-version-delimiter . ":")))) +@end lisp + @end table For instance, the following command only checks for updates of Emacs diff --git a/guix/import/git.scm b/guix/import/git.scm new file mode 100644 index 0000000000..9a654c1972 --- /dev/null +++ b/guix/import/git.scm @@ -0,0 +1,223 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2021 Xinglu Chen +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (guix import git) + #:use-module (git) + #:use-module (guix build utils) + #:use-module (guix diagnostics) + #:use-module (guix git) + #:use-module (guix git-download) + #:use-module (guix i18n) + #:use-module (guix packages) + #:use-module (guix upstream) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (ice-9 rdelim) + #:use-module (ice-9 regex) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-28) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) + #:use-module (srfi srfi-71) + #:export (%generic-git-updater)) + +;;; Commentary: +;;; +;;; This module provides a generic package updater for packages hosted on Git +;;; repositories. +;;; +;;; It tries to be smart about tag names, but if it is not automatically able +;;; to parse the tag names correctly, users can set the `tag-prefix', +;;; `tag-suffix' and `tag-version-delimiter' properties of the package to make +;;; the updater parse the Git tag name correctly. +;;; +;;; Code: + +;;; Errors & warnings + +(define-condition-type &git-tag-error &error + git-tag-error? + (kind git-tag-error-kind)) + +(define (git-tag-error kind) + (raise (condition (&message (message (format "bad `~a' property"))) + (&git-tag-error + (kind kind))))) + +(define (git-tag-warning package c) + (warning (package-location package) + (G_ "~a for package `~a'~%") + (condition-message c) + (package-name package))) + +(define-condition-type &git-no-tags-error &error + git-no-tags-error?) + +(define (git-no-tags-error) + (raise (condition (&message (message "no tags were found")) + (&git-no-tags-error)))) + +(define (git-no-tags-warning package c) + (warning (package-location package) + (G_ "~a for package `~a'~%") + (condition-message c) + (package-name package))) + +(define (git-fetch-warning package) + (warning (package-location package) + (G_ "failed to fetch Git repository for package `~a'~%") + (package-name package))) + + +;;; Helper functions + +(define (string-split* str delim) + "Like `string-split', but DELIM is a string instead of a +char-set." + (filter (lambda (str) (not (equal? str ""))) + (string-split str (string->char-set delim)))) + +(define* (get-version package tag #:key prefix suffix delim) + (define delim* (if delim delim ".")) + (define prefix-regexp "^[^0-9]*") + (define suffix-regexp (string-append "[^0-9" (regexp-quote delim*) "]*$")) + (define delim-regexp (string-append "^[0-9]+" (regexp-quote delim*) "[0-9]+")) + + (define no-prefix + (let ((match (string-match (or prefix prefix-regexp) tag))) + (if match + (regexp-substitute #f match 'post) + (git-tag-error 'tag-prefix)))) + + (define no-suffix + (let ((match (string-match (or suffix suffix-regexp) no-prefix))) + (if match + (regexp-substitute #f match 'pre) + (git-tag-error 'tag-suffix)))) + + (define no-delims + (if (string-match delim-regexp no-suffix) + (string-split* no-suffix delim*) + (git-tag-error 'tag-version-delimiter))) + + (string-join no-delims ".")) + +(define (sort-tags tags) + "Sort TAGS, a list if Git tags, such that the latest tag is the last element." + (sort tags (lambda (a b) + (eq? (version-compare a b) '<)))) + + +;;; Updater + +(define (get-remote url git-uri) + "Given a URL and GIT-URI, a record, return the ``origin'' remote." + (let* ((checkout (update-cached-checkout url + #:recursive? + (git-reference-recursive? git-uri))) + (repository (repository-open checkout))) + (remote-lookup repository "origin"))) + +(define (get-latest-tag remote) + "Given a Git REMOTE, return that latest tag available." + (remote-connect remote) + + (define tags + (sort-tags + (map (lambda (tag) + (string-drop tag (string-length "refs/tags/"))) + (filter (lambda (ref) + ;; Every tag has two refs: + ;; + ;; * refs/tags/1.2.3^{} + ;; * refs/tags/1.2.3 + ;; + ;; remove the one with the trailing ^{} + (and (not (string-suffix? "^{}" ref)) + (string-prefix? "refs/tags/" ref))) + (map (lambda (remote-head) + (remote-head-name remote-head)) + (remote-ls remote)))))) + + (remote-disconnect remote) + + (if (null? tags) + (git-no-tags-error) + (last tags))) + +(define (latest-git-tag-version package tag-prefix tag-suffix + tag-version-delimiter) + "Given a PACKAGE, the TAG-PREFIX, TAG-SUFFIX, and TAG-VERSION-DELIMITER +properties of PACKAGE, returns the latest version of PACKAGE." + (guard (c ((eq? (exception-kind c) 'git-error) + (git-fetch-warning package) + #f) + ((git-tag-error? c) + (git-tag-warning package c) + #f) + ((git-no-tags-error? c) + (git-no-tags-warning package c) + #f)) + (let* ((source (package-source package)) + (git-uri (origin-uri source)) + (url (git-reference-url (origin-uri source))) + (remote (get-remote url git-uri)) + (latest-tag (get-latest-tag remote))) + (get-version package + latest-tag + #:prefix tag-prefix + #:suffix tag-suffix + #:delim tag-version-delimiter)))) + +(define (git-package? package) + "Whether the origin of PACKAGE is a Git repostiory." + (match (package-source package) + ((? origin? origin) + (and (eq? (origin-method origin) git-fetch) + (git-reference? (origin-uri origin)))) + (_ #f))) + +(define (latest-git-release package) + "Return the latest release of PACKAGE." + (let* ((name (package-name package)) + (properties (package-properties package)) + (tag-prefix (assq-ref properties 'tag-prefix)) + (tag-suffix (assq-ref properties 'tag-suffix)) + (tag-version-delimiter (assq-ref properties 'tag-version-delimiter)) + (old-version (package-version package)) + (url (git-reference-url (origin-uri (package-source package)))) + (new-version (latest-git-tag-version package + tag-prefix + tag-suffix + tag-version-delimiter))) + + (if new-version + (upstream-source + (package name) + (version new-version) + (urls (list url))) + ;; No new release or no tags available. + #f))) + +(define %generic-git-updater + (upstream-updater + (name 'generic-git) + (description "Updater for packages hosted on Git repositories") + (pred git-package?) + (latest latest-git-release))) From patchwork Thu Sep 16 23:42:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sarah Morgensen X-Patchwork-Id: 33058 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 E306027BBE3; Fri, 17 Sep 2021 00:43:42 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,T_DKIM_INVALID, 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 5D53227BBE1 for ; Fri, 17 Sep 2021 00:43:42 +0100 (BST) Received: from localhost ([::1]:49242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mR12b-00035R-G1 for patchwork@mira.cbaines.net; Thu, 16 Sep 2021 19:43:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53552) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mR11z-00032q-Tr for guix-patches@gnu.org; Thu, 16 Sep 2021 19:43:05 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:46327) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mR11y-0005kY-BI for guix-patches@gnu.org; Thu, 16 Sep 2021 19:43:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mR11y-0004h4-92 for guix-patches@gnu.org; Thu, 16 Sep 2021 19:43:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#50359] [PATCH 3/3] import: Add 'generic-git' updater. Resent-From: Sarah Morgensen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 16 Sep 2021 23:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50359 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Xinglu Chen Cc: Ludovic =?utf-8?q?Court=C3=A8s?= , 50359@debbugs.gnu.org Received: via spool by 50359-submit@debbugs.gnu.org id=B50359.163183576818020 (code B ref 50359); Thu, 16 Sep 2021 23:43:02 +0000 Received: (at 50359) by debbugs.gnu.org; 16 Sep 2021 23:42:48 +0000 Received: from localhost ([127.0.0.1]:57873 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mR11j-0004gZ-GR for submit@debbugs.gnu.org; Thu, 16 Sep 2021 19:42:47 -0400 Received: from out2.migadu.com ([188.165.223.204]:34083) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mR11f-0004gP-SU for 50359@debbugs.gnu.org; Thu, 16 Sep 2021 19:42:45 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mgsn.dev; s=key1; t=1631835762; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=BS09ZLZPxojuNp4q9Or7B6VHTO2+qDBBXy5mFsL59N0=; b=kni2L2m0ReE2FRvBp97aIE9Wbos+i7+/cRHFHm9TXc3vmkTYYs0IwoUUA2hetSSX3aj8t2 3vfpVygdHsMYFmJpSPMw+bglPhy9OIdxVpGP9Vo6TioT6+go5wPLv+nQfm0la+Jk7e1vQq 18NE+A1cxvgzzgHjX3V/ara84EAmEac= From: Sarah Morgensen References: <5d10dd1e65b0a65ada4a8102310c10de42f53e8d.1631290349.git.public@yoctocell.xyz> <86czp8j38z.fsf@mgsn.dev> <87h7ekr8iw.fsf@yoctocell.xyz> Date: Thu, 16 Sep 2021 16:42:38 -0700 In-Reply-To: <87h7ekr8iw.fsf@yoctocell.xyz> (Xinglu Chen's message of "Thu, 16 Sep 2021 14:48:23 +0200 (10 hours, 1 minute, 2 seconds ago)") Message-ID: <867dfghytt.fsf@mgsn.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: iskarian@mgsn.dev 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 Xinglu Chen writes: >>> Maybe we could have a ‘release-tag-date-scheme?’ property, that way we >>> could just try to match dates? >> >> That seems like it might be the only way to handle it in some cases (if >> they have both versions and dates with a "." delimiter). > > It doesn’t have to be “.” delimiter though; if they both have the same > delimiter it would be difficult to distinguish a version from a date, > e.g., “1-2-3” vs “2021-03-23”. Sure, but I haven't seen the former :) >> (Though, we are actually interested in the *lack* of a date scheme. >> If they use a date scheme now, other versions will be disregarded, so >> we're fine; but if they use versions now and used a date scheme >> before, the versions will be discarded.) > > I am not sure what you are trying to say, could you elaborate? Just that the important case is disallowing dates when 'release-tag-date-scheme? is #f. If the tags of a repo are: 12.1 12.2 13.0 13.4 2018.01.01 2018.05.05 and we do nothing, the 2018.05.05 tag will be selected. This is correct if we do want dates, but incorrect if we don't (in which case we would set 'tag-version-date-scheme? to #f to get the correct result). >> Though it would be nice to see when such updates are available, is it >> worth some bogus results? Are false positives better or false negatives >> better? > > Hmm, good question! If in the future we have some kind of bot that > automatically runs ‘guix refresh -u’, builds the updated package, and > send a patch to the mailing list, not having false positives might be > more important. We could also have a ‘disable-tag-updater?’ property to > disable the updater for packages which gives false positive, or maybe > that will result in to many properties. For these packages, it would probably easier to just use the existing tag- properties. In fact, instead of this or the date-scheme above, a 'tag-version-regex' would cover both cases. In fact, we could replace 'tag-version-delimiter' with 'tag-version-regex' and instead provide convencience functions such as (untested): (define (version-regex delim) (let ((delim-rx (regexp-quote delim))) (string-append "([[:digit:]][^" delim-rx "[:punct:]]*" "(" delim-rx "[^[:punct:]" delim-rx "]+)" (if (string=? delim-rx "") "*" "+")))) (define* (version-date-regex (delim ".")) (let ((delim-rx (regexp-quote delim))) (string-append "([0-9]{4}" delim-rx "(0[1-9]|11|12)" delim-rx "(0[1-9]|[1-2][0-9])"))) WDYT? >> Unless you/we want to pursue one or both of the above changes now, the >> latest patch LGTM (modulo my nits). > > I would prefer to wait a bit with the improvements mentioned above. The > current patch has been in the works a week or two already, so it’s > probably a good idea to get it merged, and try to solve the less > important issues later. :-) Sounds good to me, then! >> I discovered that this can segfault unless 'remote-disconnect' and >> possibly 'repository-close!' are called *after* copying the data out. >> I've attached a diff for this. > > I don’t see a diff attached; maybe you forgot? :-) > I've actually attached it this time :) >>> + >>> +(define (git-package? package) >>> + "Whether the origin of PACKAGE is a Git repostiory." >> >> "Return true if PACKAGE is..." > > “PACKAGE is a Git repository.” doesn’t really sound right, maybe “if > PACKAGE is hosted on a Git repository”?' Sorry, yes, that's what I meant, or "Return true if the origin..."; I was just suggesting making it a full sentence. >> I tested this updater on all packages in .scm files starting with f >> through z, and I found the following packages with possibly bogus >> updates: >> >> --8<---------------cut here---------------start------------->8--- >> javaxom > > I assume you meant ‘java-xom’ :-) > > That’s a weird scheme; setting the delimiter to “.” doesn’t help since > it thinks that “127” is greater than “1.3.7”. 'tag-version-regex would allow fixing this ;) > >> luakit >> ocproxy >> pitivi > > ‘pitivi’ has a pretty weird version string to begin with; it may be > better to change it to the date: “0.999.0-2021-05.0” -> “2021-05.0”. > >> eid-mw >> libhomfly >> gnuradio >> welle-io > > Setting the delimiter to "." fixes the issue. > >> racket-minimal > > Setting the prefix to "v" fixes this. > >> milkytracker >> cl-portal >> kodi-cli >> openjdk >> java-bouncycastle >> hurd >> opencsg > > Setting the suffix to "-release" fixes this. > >> povray >> gpsbabel > > Setting the prefix to "gpsbabel_" fixes this. > >> go >> stepmania >> ocaml-mcl >> >> many minetest packages (minetest will have its own updater, though) >> >> ocaml4.07-core-kernel, ocamlbuild and many other ocaml packages >> (they seem to be covered by the github updater) >> --8<---------------cut here---------------end--------------->8--- I'm glad to see that these are easily fixed with the properties, though! That's some good validation. Now I just have to give the (guix upstream) some attention... --- Sarah diff --git a/guix/git.scm b/guix/git.scm index dc3d3afd02..bbff4fc890 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -593,6 +593,11 @@ is true, limit to only refs/tags." (and (ref? ref) (or (not tags?) (tag? ref)))) + (define (remote-head->ref remote) + (let ((name (remote-head-name remote))) + (and (include? name) + name))) + (with-libgit2 (call-with-temporary-directory (lambda (cache-directory) @@ -600,14 +605,13 @@ is true, limit to only refs/tags." ;; Create an in-memory remote so we don't touch disk. (remote (remote-create-anonymous repository url))) (remote-connect remote) - (remote-disconnect remote) - (repository-close! repository) - - (filter-map (lambda (remote) - (let ((name (remote-head-name remote))) - (and (include? name) - name))) - (remote-ls remote))))))) + + (let* ((remote-heads (remote-ls remote)) + (refs (filter-map remote-head->ref remote-heads))) + ;; Wait until we're finished with the repository before closing it. + (remote-disconnect remote) + (repository-close! repository) + refs)))))) ;;;