recipetool: Handle several go-import tags in go resolver

When dynamically resolving go modules, the HTML page may contain several
go-import meta tags. We must handle all and pick the correct one based
on the module name. An example for such a behaviour is
gonum.org/v1/gonum:

<meta name="go-import" content="gonum.org/v1/exp git https://github.com/gonum/exp">
<meta name="go-import" content="gonum.org/v1/gonum git https://github.com/gonum/gonum">
<meta name="go-import" content="gonum.org/v1/hdf5 git https://github.com/gonum/hdf5">
<meta name="go-import" content="gonum.org/v1/netlib git https://github.com/gonum/netlib">
<meta name="go-import" content="gonum.org/v1/plot git https://github.com/gonum/plot">
<meta name="go-import" content="gonum.org/v1/tools git https://github.com/gonum/tools">

(From OE-Core rev: 9c36a61e29359067165bddc7f2accdf2c4c8a761)

Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Sven Schwermer 2024-04-11 12:10:30 +02:00 committed by Richard Purdie
parent e4c3483ecf
commit 8219eefdd8

View File

@ -225,7 +225,7 @@ class GoRecipeHandler(RecipeHandler):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.__srv = [] self.__srv = {}
def handle_starttag(self, tag, attrs): def handle_starttag(self, tag, attrs):
if tag == 'meta' and list( if tag == 'meta' and list(
@ -233,19 +233,14 @@ class GoRecipeHandler(RecipeHandler):
content = list( content = list(
filter(lambda a: (a[0] == 'content'), attrs)) filter(lambda a: (a[0] == 'content'), attrs))
if content: if content:
self.__srv = content[0][1].split() srv = content[0][1].split()
self.__srv[srv[0]] = srv
@property def go_import(self, modulepath):
def import_prefix(self): if modulepath in self.__srv:
return self.__srv[0] if len(self.__srv) else None srv = self.__srv[modulepath]
return GoImport(srv[0], srv[1], srv[2], None)
@property return None
def vcs(self):
return self.__srv[1] if len(self.__srv) else None
@property
def repourl(self):
return self.__srv[2] if len(self.__srv) else None
url = url.geturl() + "?go-get=1" url = url.geturl() + "?go-get=1"
req = urllib.request.Request(url) req = urllib.request.Request(url)
@ -265,7 +260,7 @@ class GoRecipeHandler(RecipeHandler):
parser.feed(body.decode('utf-8')) parser.feed(body.decode('utf-8'))
parser.close() parser.close()
return GoImport(parser.import_prefix, parser.vcs, parser.repourl, None) return parser.go_import(modulepath)
def __resolve_from_golang_proxy(self, modulepath, version): def __resolve_from_golang_proxy(self, modulepath, version):
""" """