Subject: [bug#63571] [PATCH v2 17/19] import: gem: Updater provides input list.

From: Ludovic Courtès <[email-masked]>
Date: Mon, 29 May 2023 16:45:28 +0200

* guix/import/gem.scm (import-release): Add 'inputs' field.
* tests/gem.scm ("package-latest-release"): New test.
---
 guix/import/gem.scm | 13 +++++++++++--
 tests/gem.scm       | 31 +++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index 87a75bdaa6..56cbc681a1 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 David Thompson <[email-masked]>
 ;;; Copyright © 2016 Ben Woodcroft <[email-masked]>
 ;;; Copyright © 2018 Oleg Pykhalov <[email-masked]>
-;;; Copyright © 2020, 2021 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2020, 2021, 2023 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2020 Martin Becze <[email-masked]>
 ;;; Copyright © 2021 Sarah Morgensen <[email-masked]>
 ;;; Copyright © 2022 Taiju HIGASHI <[email-masked]>
@@ -176,12 +176,21 @@ (define* (import-release package #:key (version #f))
   "Return an <upstream-source> for the latest release of PACKAGE."
   (let* ((gem-name (guix-package->gem-name package))
          (gem      (rubygems-fetch gem-name))
+         (inputs   (map (lambda (dependency)
+                          (let ((name (gem-dependency-name dependency)))
+                            (upstream-input
+                             (name name)
+                             (downstream-name
+                              (ruby-package-name name))
+                             (type 'propagated))))
+                        (gem-dependencies-runtime (gem-dependencies gem))))
          (version  (or version (gem-version gem)))
          (url      (rubygems-uri gem-name version)))
     (upstream-source
      (package (package-name package))
      (version version)
-     (urls (list url)))))
+     (urls (list url))
+     (inputs inputs))))
 
 (define %gem-updater
   (upstream-updater
diff --git a/tests/gem.scm b/tests/gem.scm
index 023415de7b..a2b5e39077 100644
--- a/tests/gem.scm
+++ b/tests/gem.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <[email-masked]>
 ;;; Copyright © 2021 Sarah Morgensen <[email-masked]>
 ;;; Copyright © 2022 Taiju HIGASHI <[email-masked]>
+;;; Copyright © 2023 Ludovic Courtès <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +23,9 @@
 
 (define-module (test-gem)
   #:use-module (guix import gem)
+  #:use-module (guix upstream)
+  #:use-module ((guix download) #:select (url-fetch))
+  #:use-module ((guix build-system ruby) #:select (rubygems-uri))
   #:use-module (guix base32)
   #:use-module (gcrypt hash)
   #:use-module (guix tests)
@@ -253,4 +257,31 @@ (define test-bundler-json
           (x
            (pk 'fail x #f)))))
 
+(test-equal "package-latest-release"
+  (list '("https://rubygems.org/downloads/foo-1.0.0.gem")
+        (list (upstream-input
+               (name "bundler")
+               (downstream-name name)
+               (type 'propagated))
+              (upstream-input
+               (name "bar")
+               (downstream-name "ruby-bar")
+               (type 'propagated))))
+  (mock ((guix http-client) http-fetch
+         (lambda (url . rest)
+           (match url
+             ("https://rubygems.org/api/v1/gems/foo.json"
+              (values (open-input-string test-foo-json)
+                      (string-length test-foo-json)))
+             (_ (error "Unexpected URL: " url)))))
+        (let ((source (package-latest-release
+                       (dummy-package "ruby-foo"
+                                      (version "0.1.2")
+                                      (source (dummy-origin
+                                               (method url-fetch)
+                                               (uri (rubygems-uri "foo"
+                                                                  version))))))))
+          (list (upstream-source-urls source)
+                (upstream-source-inputs source)))))
+
 (test-end "gem")
-- 
2.40.1