import: hackage: Fix Cabal test.

* guix/import/hackage.scm (hackage->guix-package): Remove call to 'memoize'.
(hackage->guix-package/m): New procedure.
(hackage-recursive-import): Use it.
* tests/hackage.scm ("hackage->guix-package test 6"): Adjust.

Co-authored-by: Robert Vollmert <rob@vllmrt.net>
This commit is contained in:
Ludovic Courtès 2019-05-26 23:18:21 +02:00
parent 002d17dcaa
commit ad7466aafd
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 52 additions and 17 deletions

View File

@ -279,13 +279,11 @@ representation of a Cabal file as produced by 'read-cabal'."
(license ,(string->license (cabal-package-license cabal)))) (license ,(string->license (cabal-package-license cabal))))
(append hackage-dependencies hackage-native-dependencies)))) (append hackage-dependencies hackage-native-dependencies))))
(define hackage->guix-package (define* (hackage->guix-package package-name #:key
(memoize (include-test-dependencies? #t)
(lambda* (package-name #:key (port #f)
(include-test-dependencies? #t) (cabal-environment '()))
(port #f) "Fetch the Cabal file for PACKAGE-NAME from hackage.haskell.org, or, if the
(cabal-environment '()))
"Fetch the Cabal file for PACKAGE-NAME from hackage.haskell.org, or, if the
called with keyword parameter PORT, from PORT. Return the `package' called with keyword parameter PORT, from PORT. Return the `package'
S-expression corresponding to that package, or #f on failure. S-expression corresponding to that package, or #f on failure.
CABAL-ENVIRONMENT is an alist defining the environment in which the Cabal CABAL-ENVIRONMENT is an alist defining the environment in which the Cabal
@ -295,18 +293,22 @@ symbol 'true' or 'false'. The value associated with other keys has to conform
to the Cabal file format definition. The default value associated with the to the Cabal file format definition. The default value associated with the
keys \"os\", \"arch\" and \"impl\" is \"linux\", \"x86_64\" and \"ghc\" keys \"os\", \"arch\" and \"impl\" is \"linux\", \"x86_64\" and \"ghc\"
respectively." respectively."
(let ((cabal-meta (if port (let ((cabal-meta (if port
(read-cabal (canonical-newline-port port)) (read-cabal (canonical-newline-port port))
(hackage-fetch package-name)))) (hackage-fetch package-name))))
(and=> cabal-meta (compose (cut hackage-module->sexp <> (and=> cabal-meta (compose (cut hackage-module->sexp <>
#:include-test-dependencies? #:include-test-dependencies?
include-test-dependencies?) include-test-dependencies?)
(cut eval-cabal <> cabal-environment))))))) (cut eval-cabal <> cabal-environment)))))
(define hackage->guix-package/m ;memoized variant
(memoize hackage->guix-package))
(define* (hackage-recursive-import package-name . args) (define* (hackage-recursive-import package-name . args)
(recursive-import package-name #f (recursive-import package-name #f
#:repo->guix-package (lambda (name repo) #:repo->guix-package (lambda (name repo)
(apply hackage->guix-package (cons name args))) (apply hackage->guix-package/m
(cons name args)))
#:guix-name hackage-name->package-name)) #:guix-name hackage-name->package-name))
(define (hackage-package? package) (define (hackage-package? package)

View File

@ -207,8 +207,41 @@ library
#:cabal-environment '(("impl" . "ghc-7.8")))) #:cabal-environment '(("impl" . "ghc-7.8"))))
(test-assert "hackage->guix-package test 6" (test-assert "hackage->guix-package test 6"
(eval-test-with-cabal test-cabal-6 (mock
#:cabal-environment '(("impl" . "ghc-7.8")))) ((guix import hackage) hackage-fetch
(lambda (name-version)
(call-with-input-string test-cabal-6
read-cabal)))
(match (hackage->guix-package "foo")
(('package
('name "ghc-foo")
('version "1.0.0")
('source
('origin
('method 'url-fetch)
('uri ('string-append
"https://hackage.haskell.org/package/foo/foo-"
'version
".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'haskell-build-system)
('inputs
('quasiquote
(("ghc-b" ('unquote 'ghc-b))
("ghc-http" ('unquote 'ghc-http))
("ghc-mtl" ('unquote 'ghc-mtl)))))
('native-inputs
('quasiquote
(("ghc-haskell-gi" ('unquote 'ghc-haskell-gi)))))
('home-page "http://test.org")
('synopsis (? string?))
('description (? string?))
('license 'bsd-3))
#t)
(x
(pk 'fail x #f)))))
(test-assert "read-cabal test 1" (test-assert "read-cabal test 1"
(match (call-with-input-string test-read-cabal-1 read-cabal) (match (call-with-input-string test-read-cabal-1 read-cabal)