summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/import/opam.scm21
-rw-r--r--guix/scripts/import/opam.scm10
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))