guix: opam: Add --repo argument to importer.

* guix/scripts/import/opam.scm (guix-import-opam): Pass --repo argument
to recursive and non-recursive importers.
* guix/import/opam.scm (get-opam-repository): Select proper repository
location depending on a new repo argument.
(opam->guix-package): Use get-opam-repository in the procedure body.
This commit is contained in:
Julien Lepiller 2020-12-08 14:58:39 +01:00
parent 15ee1b8317
commit a8dccd4bdc
No known key found for this signature in database
GPG key ID: 53D457B2D636EE82
2 changed files with 22 additions and 9 deletions

View file

@ -120,12 +120,19 @@ (define-peg-pattern condition-paren body (and "(" condition-form ")"))
(define-peg-pattern condition-string all (and QUOTE (* STRCHR) QUOTE))
(define-peg-pattern condition-var all (+ (or (range #\a #\z) "-" ":")))
(define (get-opam-repository)
(define* (get-opam-repository #:optional repo)
"Update or fetch the latest version of the opam repository and return the
path to the repository."
(receive (location commit _)
(update-cached-checkout "https://github.com/ocaml/opam-repository")
location))
(let ((url (cond
((or (not repo) (equal? repo 'opam))
"https://github.com/ocaml/opam-repository")
(else (throw 'unknown-repository repo)))))
(receive (location commit _)
(update-cached-checkout url)
(cond
((or (not repo) (equal? repo 'opam))
location)
(else location)))))
(define (latest-version versions)
"Find the most recent version from a list of versions."
@ -264,11 +271,11 @@ (define* (opam-fetch name #:optional (repository (get-opam-repository)))
(substring version 1)
version)))))
(define* (opam->guix-package name #:key (repo (get-opam-repository)) version)
(define* (opam->guix-package name #:key (repo 'opam) version)
"Import OPAM package NAME from REPOSITORY (a directory name) or, if
REPOSITORY is #f, from the official OPAM repository. Return a 'package' sexp
or #f on failure."
(and-let* ((opam-file (opam-fetch name repo))
(and-let* ((opam-file (opam-fetch name (get-opam-repository repo)))
(version (assoc-ref opam-file "version"))
(opam-content (assoc-ref opam-file "metadata"))
(url-dict (metadata-ref opam-content "url"))
@ -323,7 +330,7 @@ (define* (opam->guix-package name #:key (repo (get-opam-repository)) version)
(not (member name '("dune" "jbuilder"))))
dependencies))))))))
(define* (opam-recursive-import package-name #:repo (get-opam-repository))
(define* (opam-recursive-import package-name #:key repo)
(recursive-import package-name
#:repo->guix-package opam->guix-package
#:guix-name ocaml-name->guix-name

View file

@ -44,6 +44,8 @@ (define (show-help)
-h, --help display this help and exit"))
(display (G_ "
-r, --recursive import packages recursively"))
(display (G_ "
--repo import packages from this opam repository"))
(display (G_ "
-V, --version display version information and exit"))
(newline)
@ -58,6 +60,9 @@ (define %options
(option '(#\V "version") #f #f
(lambda args
(show-version-and-exit "guix import opam")))
(option '(#f "repo") #t #f
(lambda (opt name arg result)
(alist-cons 'repo arg result)))
(option '(#\r "recursive") #f #f
(lambda (opt name arg result)
(alist-cons 'recursive #t result)))
@ -79,6 +84,7 @@ (define (parse-options)
%default-options))
(let* ((opts (parse-options))
(repo (and=> (assoc-ref opts 'repo) string->symbol))
(args (filter-map (match-lambda
(('argument . value)
value)
@ -93,9 +99,9 @@ (define (parse-options)
`(define-public ,(string->symbol name)
,pkg))
(_ #f))
(opam-recursive-import package-name))
(opam-recursive-import package-name #:repo repo))
;; Single import
(let ((sexp (opam->guix-package package-name)))
(let ((sexp (opam->guix-package package-name #:repo repo)))
(unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%")
package-name))