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
next 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.