all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Sarah Morgensen via Guix-patches via <guix-patches@gnu.org>
To: 49591@debbugs.gnu.org
Subject: [bug#49591] [PATCH] import: go: Handle multiple go-import meta tags.
Date: Thu, 15 Jul 2021 19:01:52 -0700	[thread overview]
Message-ID: <e62cad4f0afd4f20d372be5c3b2c9bdabfbd2746.1626399943.git.iskarian@mgsn.dev> (raw)

* guix/import/go.scm (fetch-module-meta-data): Parse all go-import meta
tags and return the first 'module-meta' with a matching import prefix.
[go-import->module-meta]: Extract parsing into new procedure.
---
Hello Guix,

It seems sometimes a module's go-get page contains multiple

  <meta name="go-import" ...>

tags, for example the 'bazil.org/fuse' module. This causes a backtrace when
attempting to import such a module:

-----8<---------------cut here---------------start------------->8---
$ guix import go bazil.org/fuse
following redirection to `https://bazil.org/fuse/?go-get=1'...
Backtrace:
           5 (primitive-load "/home/sarah/.config/guix/current/bin/g…")
In guix/ui.scm:
   2182:7  4 (run-guix . _)
  2145:10  3 (run-guix-command _ . _)
In guix/scripts/import.scm:
   120:11  2 (guix-import . _)
In guix/scripts/import/go.scm:
   118:27  1 (guix-import-go . _)
In guix/import/go.scm:
    467:4  0 (go-module->guix-package _ #:goproxy _ #:version _ # _)

guix/import/go.scm:467:4: In procedure go-module->guix-package:
Throw to key `match-error' with args `("match" "no matching pattern" ((content "bazil.org/bazil git https://github.com/bazil/bazil") (content "bazil.org/fuse git https://github.com/bazil/fuse") (content "bazil.org/bolt-mount git https://github.com/bazil/bolt-mount") (content "bazil.org/zipfs git https://github.com/bazil/zipfs") (content "bazil.org/plop git https://github.com/bazil/plop")))'.
--8<---------------cut here---------------end--------------->8---

This patch makes the importer parse all such tags and search for one with an
import prefix that is a prefix of the module-path we are looking for.

(I attempted to add a unit test but could not figure out how to make the
record type accessible to the test script.)

--
Sarah

 guix/import/go.scm | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/guix/import/go.scm b/guix/import/go.scm
index d8f838f635..182db0ecfb 100644
--- a/guix/import/go.scm
+++ b/guix/import/go.scm
@@ -460,17 +460,21 @@ Optionally include a VERSION string to append to the name."
   "Retrieve the module meta-data from its landing page.  This is necessary
 because goproxy servers don't currently provide all the information needed to
 build a package."
+  (define (go-import->module-meta content-text)
+    (match (string-split content-text #\space)
+      ((root-path vcs repo-url)
+       (make-module-meta root-path (string->symbol vcs)
+                         (strip-.git-suffix/maybe repo-url)))))
   ;; <meta name="go-import" content="import-prefix vcs repo-root">
   (let* ((meta-data (http-fetch* (format #f "https://~a?go-get=1" module-path)))
          (select (sxpath `(// head (meta (@ (equal? (name "go-import"))))
                               // content))))
     (match (select (html->sxml meta-data #:strict? #t))
       (() #f)                           ;nothing selected
-      (((content content-text))
-       (match (string-split content-text #\space)
-         ((root-path vcs repo-url)
-          (make-module-meta root-path (string->symbol vcs)
-                            (strip-.git-suffix/maybe repo-url))))))))
+      ((('content content-text) ..1)
+       (find (lambda (meta)
+               (string-prefix? (module-meta-import-prefix meta) module-path))
+             (map go-import->module-meta content-text))))))
 
 (define (module-meta-data-repo-url meta-data goproxy)
   "Return the URL where the fetcher which will be used can download the

base-commit: 01d7e8c2782f61e741f8beff7888adfbdb61779d
-- 
2.31.1





             reply	other threads:[~2021-07-16  2:03 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-16  2:01 Sarah Morgensen via Guix-patches via [this message]
2021-07-18  3:31 ` [bug#49591] [PATCH] import: go: Handle multiple go-import meta tags Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e62cad4f0afd4f20d372be5c3b2c9bdabfbd2746.1626399943.git.iskarian@mgsn.dev \
    --to=guix-patches@gnu.org \
    --cc=49591@debbugs.gnu.org \
    --cc=iskarian@mgsn.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.