diff options
author | Julien Lepiller <julien@lepiller.eu> | 2020-12-08 14:58:39 +0100 |
---|---|---|
committer | Julien Lepiller <julien@lepiller.eu> | 2020-12-08 16:47:22 +0100 |
commit | a8dccd4bdc1e58219d4ba08fe1649bf0b8325f44 (patch) | |
tree | a1182100f693fd167192e96f6305c337534e4801 | |
parent | 15ee1b8317adeb74938f3bb7f0c7cb635a818292 (diff) | |
download | guix-a8dccd4bdc1e58219d4ba08fe1649bf0b8325f44.tar.gz guix-a8dccd4bdc1e58219d4ba08fe1649bf0b8325f44.zip |
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.
-rw-r--r-- | guix/import/opam.scm | 21 | ||||
-rw-r--r-- | guix/scripts/import/opam.scm | 10 |
2 files changed, 22 insertions, 9 deletions
diff --git a/guix/import/opam.scm b/guix/import/opam.scm index 6e98822104..6f5c95df3b 100644 --- a/guix/import/opam.scm +++ b/guix/import/opam.scm @@ -120,12 +120,19 @@ (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 @@ path to the 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 @@ or #f on failure." (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 diff --git a/guix/scripts/import/opam.scm b/guix/scripts/import/opam.scm index 20da1437fe..da9392821c 100644 --- a/guix/scripts/import/opam.scm +++ b/guix/scripts/import/opam.scm @@ -45,6 +45,8 @@ Import and convert the opam package for PACKAGE-NAME.\n")) (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) (show-bug-report-information)) @@ -58,6 +60,9 @@ Import and convert the opam package for PACKAGE-NAME.\n")) (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 @@ Import and convert the opam package for PACKAGE-NAME.\n")) %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 @@ Import and convert the opam package for PACKAGE-NAME.\n")) `(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)) |