mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
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:
parent
15ee1b8317
commit
a8dccd4bdc
2 changed files with 22 additions and 9 deletions
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in a new issue