~ruther/guix-local

9e237fe0bd813664adf54599586df75b2e5b0998 — Ludovic Courtès 3 years ago e6f82fc
import: gem: Updater provides input list.

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

M guix/import/gem.scm
M tests/gem.scm
M guix/import/gem.scm => guix/import/gem.scm +11 -2
@@ 2,7 2,7 @@
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>


@@ 176,12 176,21 @@ package on RubyGems."
  "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

M tests/gem.scm => tests/gem.scm +31 -0
@@ 4,6 4,7 @@
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; 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 @@
          (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")