diff mbox series

[bug#57460,08/20] refresh: Allow updating to a specific version (git)

Message ID cd2a0330ffcfba32e8be11e0c8f53f0bc7b2fc7c.1661691694.git.h.goebel@crazy-compilers.com
State New
Headers show
Series Refresh to specific version | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success
cbaines/issue success View issue
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Hartmut Goebel Aug. 28, 2022, 1:18 p.m. UTC
* guix/import/git.scm
  (latest-tag): Add keyword-argument 'version'. If version is given, try to
  find the respective version tag.
  (latest-git-tag-version): Add keyword-argument 'version' and pass it on to
  called functions.
  (latest-releease) Rename to (import-release), add keyword-argument 'version'
  and pass it on to called functions.
---
 guix/import/git.scm | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

Comments

Ludovic Courtès Sept. 24, 2022, 9:24 a.m. UTC | #1
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:

> * guix/import/git.scm
>   (latest-tag): Add keyword-argument 'version'. If version is given, try to
>   find the respective version tag.
>   (latest-git-tag-version): Add keyword-argument 'version' and pass it on to
>   called functions.
>   (latest-releease) Rename to (import-release), add keyword-argument 'version'
>   and pass it on to called functions.

(Same comment as before.)

> +(define* (latest-tag url
> +                     #:key prefix suffix delim pre-releases? (version #f))
>    "Return the latest version and corresponding tag available from the Git
>  repository at URL."

Please augment the docstring to explain the meaning of #:version.

> +      (let ((version-to-pick
> +             (if version
> +                 (filter (lambda (vt) (string=? version (car vt)))
> +                         versions->tags)
> +                 versions->tags)))

Rather:

  (let ((versions (if version
                      (filter (match-lambda
                                ((candidate-version . tag)
                                 (string=? version candidate-version)))
                              versions->tag)
                      versions->tag)))
    (if (null? versions) …))

> +            (match (last version-to-pick)
> +                   ((version . tag)
> +                    (values version tag)))))))))

Please adjust the indentation of the ‘match’ form so it matches what is
done elsewhere.

Otherwise LGTM.

Ludo’.
diff mbox series

Patch

diff --git a/guix/import/git.scm b/guix/import/git.scm
index bb5ba4d97e..fdac51edfd 100644
--- a/guix/import/git.scm
+++ b/guix/import/git.scm
@@ -2,6 +2,7 @@ 
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -146,7 +147,8 @@  version corresponding to the tag, and the cdr is the name of the tag."
                            tags)
                entry<?))
 
-(define* (latest-tag url #:key prefix suffix delim pre-releases?)
+(define* (latest-tag url
+                     #:key prefix suffix delim pre-releases? (version #f))
   "Return the latest version and corresponding tag available from the Git
 repository at URL."
   (define (pre-release? tag)
@@ -169,11 +171,18 @@  repository at URL."
      ((null? versions->tags)
       (git-no-valid-tags-error))
      (else
-      (match (last versions->tags)
-        ((version . tag)
-         (values version tag)))))))
-
-(define (latest-git-tag-version package)
+      (let ((version-to-pick
+             (if version
+                 (filter (lambda (vt) (string=? version (car vt)))
+                         versions->tags)
+                 versions->tags)))
+        (if (null? version-to-pick)
+            (values #f #f)
+            (match (last version-to-pick)
+                   ((version . tag)
+                    (values version tag)))))))))
+
+(define* (latest-git-tag-version package #:key (version #f))
   "Given a PACKAGE, return the latest version of it and the corresponding git
 tag, or #false and #false if the latest version could not be determined."
   (guard (c ((or (git-no-tags-error? c) (git-no-valid-tags-error? c))
@@ -193,6 +202,7 @@  tag, or #false and #false if the latest version could not be determined."
            (url (git-reference-url (origin-uri source)))
            (property (cute assq-ref (package-properties package) <>)))
       (latest-tag url
+                  #:version version
                   #:prefix (property 'release-tag-prefix)
                   #:suffix (property 'release-tag-suffix)
                   #:delim (property 'release-tag-version-delimiter)
@@ -206,12 +216,13 @@  tag, or #false and #false if the latest version could not be determined."
           (git-reference? (origin-uri origin))))
     (_ #f)))
 
-(define (latest-git-release package)
+(define* (import-git-release package #:key (version #f))
   "Return an <upstream-source> for the latest release of PACKAGE."
   (let* ((name (package-name package))
          (old-version (package-version package))
          (old-reference (origin-uri (package-source package)))
-         (new-version new-version-tag (latest-git-tag-version package)))
+         (new-version new-version-tag
+                      (latest-git-tag-version package #:version version)))
     (and new-version new-version-tag
          (upstream-source
           (package name)
@@ -226,4 +237,4 @@  tag, or #false and #false if the latest version could not be determined."
    (name 'generic-git)
    (description "Updater for packages hosted on Git repositories")
    (pred git-package?)
-   (import latest-git-release)))
+   (import import-git-release)))