GNU bug report logs - #75496
[PATCH rust-team 1/2] import: crate: Fix find-package-version.

Previous Next

Package: guix-patches;

Reported by: Herman Rimm <herman <at> rimm.ee>

Date: Sat, 11 Jan 2025 14:39:02 UTC

Severity: normal

Tags: patch

Done: Efraim Flashner <efraim <at> flashner.co.il>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 75496 in the body.
You can then email your comments to 75496 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to divya <at> subvertising.org, efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#75496; Package guix-patches. (Sat, 11 Jan 2025 14:39:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Herman Rimm <herman <at> rimm.ee>:
New bug report received and forwarded. Copy sent to divya <at> subvertising.org, efraim <at> flashner.co.il, guix-patches <at> gnu.org. (Sat, 11 Jan 2025 14:39:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Herman Rimm <herman <at> rimm.ee>
To: guix-patches <at> gnu.org
Subject: [PATCH rust-team 1/2] import: crate: Fix find-package-version.
Date: Sat, 11 Jan 2025 15:37:06 +0100
Fixes bug from 5ce1512b0f68cf39cb399623a14302f309c06129, where the
earliest existing package (if any) was returned instead.  See also:

https://issues.guix.gnu.org/68346#3-lineno97

* guix/import/crate.scm (crate->guix-package)[find-package-version]:
Invert boolean expression.

Change-Id: I1d05f55a027241e7c5f62cc98a50a09b5639bdcf
---
 guix/import/crate.scm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index b4806c8bb22..a7134b85722 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -335,9 +335,9 @@ (define* (crate->guix-package
                           (find-packages-by-name
                            (crate-name->package-name name))))
              (match-lambda* (((semver1 yanked1) (semver2 yanked2))
-                             (or (and yanked1 (not yanked2))
-                                 (and (eq? yanked1 yanked2)
-                                      (semver<? semver1 semver2))))))))
+                             (and (or (not yanked1) yanked2)
+                                  (or (not (eq? yanked1 yanked2))
+                                      (semver>? semver1 semver2))))))))
       (and (not (eq? #f version))
            (match-let (((semver yanked) version))
              (list (semver->string semver) yanked)))))

base-commit: 986245daca2fb50d58cf0f2b9273f0d670d38af2
-- 
2.47.1





Information forwarded to divya <at> subvertising.org, efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#75496; Package guix-patches. (Sat, 11 Jan 2025 14:40:01 GMT) Full text and rfc822 format available.

Message #8 received at 75496 <at> debbugs.gnu.org (full text, mbox):

From: Herman Rimm <herman <at> rimm.ee>
To: 75496 <at> debbugs.gnu.org
Subject: [PATCH rust-team 2/2] import: crate: Refactor find-package-version.
Date: Sat, 11 Jan 2025 15:38:48 +0100
* guix/import/crate.scm (crate->guix-package)[find-package-version]:
Move to top-level.
[dependency-name+version+yanked]: Adjust.
(find-package-version): Take allow-yanked? argument.  Use (let) loop,
match, if instead of map, filter, min-element.

Change-Id: I1d05f55a027241e7c5f62cc98a50a09b5639bdcf
---
 guix/import/crate.scm | 55 ++++++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 27 deletions(-)

diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index a7134b85722..d790126ef6e 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2023 Simon Tournier <zimon.toutoune <at> gmail.com>
 ;;; Copyright © 2023, 2024 Efraim Flashner <efraim <at> flashner.co.il>
 ;;; Copyright © 2023, 2024 David Elsing <david.elsing <at> posteo.net>
+;;; Copyright © 2025 Herman Rimm <herman <at> rimm.ee>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -290,6 +291,31 @@ (define (nonyanked-crate-versions crate)
             (not (crate-version-yanked? entry)))
           (crate-versions crate)))
 
+(define (find-package-version name range allow-yanked?)
+  "Find the latest existing package that fulfills the SemVer RANGE.  If
+ALLOW-YANKED? is #t, include packages marked as yanked at a lower
+priority."
+  (set! range (string->semver-range range))
+  (let loop ((packages (find-packages-by-name
+                         (crate-name->package-name name)))
+             (semver #f)
+             (yanked? #f))
+    (match packages
+      ((pkg packages ...)
+       (let ((pkg-yanked? (assoc-ref (package-properties pkg)
+                                    'crate-version-yanked?)))
+         (if (or allow-yanked? (not pkg-yanked?))
+             (let ((pkg-semver (string->semver (package-version pkg))))
+               (if (and (or (not semver)
+                            (and yanked? (not pkg-yanked?))
+                            (and (eq? yanked? pkg-yanked?)
+                                 (semver>? pkg-semver semver)))
+                        (semver-range-contains? range pkg-semver))
+                   (loop packages pkg-semver pkg-yanked?)
+                   (loop packages semver yanked?)))
+             (loop packages semver yanked?))))
+      (() (and semver (list (semver->string semver) yanked?))))))
+
 (define* (crate->guix-package
           crate-name
           #:key version include-dev-deps? allow-yanked? #:allow-other-keys)
@@ -316,32 +342,6 @@ (define* (crate->guix-package
          (or version
              (crate-latest-version crate))))
 
-  ;; Find the highest existing package that fulfills the semver <range>.
-  ;; Packages previously marked as yanked take lower priority.
-  (define (find-package-version name range)
-    (let* ((semver-range (string->semver-range range))
-           (version
-            (min-element
-             (filter (match-lambda ((semver yanked)
-                                    (and
-                                     (or allow-yanked? (not yanked))
-                                     (semver-range-contains? semver-range semver))))
-                     (map (lambda (pkg)
-                            (let ((version (package-version pkg)))
-                              (list
-                                (string->semver version)
-                                (assoc-ref (package-properties pkg)
-                                           'crate-version-yanked?))))
-                          (find-packages-by-name
-                           (crate-name->package-name name))))
-             (match-lambda* (((semver1 yanked1) (semver2 yanked2))
-                             (and (or (not yanked1) yanked2)
-                                  (or (not (eq? yanked1 yanked2))
-                                      (semver>? semver1 semver2))))))))
-      (and (not (eq? #f version))
-           (match-let (((semver yanked) version))
-             (list (semver->string semver) yanked)))))
-
   ;; Find the highest version of a crate that fulfills the semver <range>.
   ;; If no matching non-yanked version has been found and allow-yanked? is #t,
   ;; also consider yanked packages.
@@ -361,7 +361,8 @@ (define* (crate->guix-package
   (define (dependency-name+version+yanked dep)
     (let* ((name (crate-dependency-id dep))
                  (req (crate-dependency-requirement dep))
-                 (existing-version (find-package-version name req)))
+                 (existing-version
+                  (find-package-version name req allow-yanked?)))
       (if (and existing-version (not (second existing-version)))
           (cons name existing-version)
           (let* ((crate (lookup-crate* name))
-- 
2.47.1





Information forwarded to guix-patches <at> gnu.org:
bug#75496; Package guix-patches. (Sat, 11 Jan 2025 15:58:02 GMT) Full text and rfc822 format available.

Message #11 received at 75496 <at> debbugs.gnu.org (full text, mbox):

From: Herman Rimm <herman <at> rimm.ee>
To: 75496 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>,
 Divya Ranjan Pattanaik <divya <at> subvertising.org>
Subject: Re: bug#75496: Acknowledgement ([PATCH rust-team 1/2] import: crate:
 Fix find-package-version.)
Date: Sat, 11 Jan 2025 16:56:42 +0100
Hello,

Can [PATCH 1/2] be applied/merged to the master branch as well?

Cheers,
Herman




Reply sent to Efraim Flashner <efraim <at> flashner.co.il>:
You have taken responsibility. (Sun, 26 Jan 2025 09:10:02 GMT) Full text and rfc822 format available.

Notification sent to Herman Rimm <herman <at> rimm.ee>:
bug acknowledged by developer. (Sun, 26 Jan 2025 09:10:02 GMT) Full text and rfc822 format available.

Message #16 received at 75496-done <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: Herman Rimm <herman <at> rimm.ee>
Cc: Divya Ranjan Pattanaik <divya <at> subvertising.org>, 75496-done <at> debbugs.gnu.org
Subject: Re: bug#75496: Acknowledgement ([PATCH rust-team 1/2] import: crate:
 Fix find-package-version.)
Date: Sun, 26 Jan 2025 11:08:48 +0200
[Message part 1 (text/plain, inline)]
On Sat, Jan 11, 2025 at 04:56:42PM +0100, Herman Rimm wrote:
> Hello,
> 
> Can [PATCH 1/2] be applied/merged to the master branch as well?
> 
> Cheers,
> Herman

They both can be applied to master.

It took me a while to remember what this was about, but I have seen
package updates that downgraded dependent crates to older versions.  I'm
going to miss preferring older versions (that are easier to package)
when it comes to new crates, but it's definitely a change we need.

Patches pushed!

-- 
Efraim Flashner   <efraim <at> flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 23 Feb 2025 12:24:20 GMT) Full text and rfc822 format available.

This bug report was last modified 18 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.