Gentoo Archives: gentoo-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-dev@l.g.o, mgorny@g.o, William Hubbs <williamh@g.o>
Subject: Re: [gentoo-dev] [PATCH 1/1] go-module.eclass: introduce new eclass to handle go modules
Date: Tue, 17 Sep 2019 17:40:51
Message-Id: 1d187ef7-25f0-ac53-6cb7-8f4182f54fec@gentoo.org
In Reply to: Re: [gentoo-dev] [PATCH 1/1] go-module.eclass: introduce new eclass to handle go modules by William Hubbs
1 On 9/17/19 7:10 AM, William Hubbs wrote:
2 > On Tue, Sep 17, 2019 at 07:36:07AM +0200, Michał Górny wrote:
3 >> On Mon, 2019-09-16 at 17:00 -0500, William Hubbs wrote:
4 >>> On Mon, Sep 16, 2019 at 11:50:12AM -0700, Zac Medico wrote:
5 >>>> On 9/16/19 11:35 AM, William Hubbs wrote:
6 >>>>> On Mon, Sep 16, 2019 at 11:01:38AM -0700, Zac Medico wrote:
7 >>>>>> For packages that I maintain, I'd prefer to continue using EGO_VENDOR to
8 >>>>>> even with packages using go.mod. I hope that this go-module.class will
9 >>>>>> not preclude this sort of usage. For example, the latest go-tools ebuild
10 >>>>>> uses EGO_VENDOR together with GOFLAGS="-mod=vendor":
11 >>>>>>
12 >>>>>> https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8cc6d401139526e2f9a6dbadbd31f0ff2387705f
13 >>>>>
14 >>>>> Can you elaborate on why you want to keep EGO_VENDOR?
15 >>>>>
16 >>>>> The "go mod vendor" command above downloads all the correct versions
17 >>>>> of the dependencies and puts them in the vendor directory, so I'm not
18 >>>>> sure why you would need the EGO_VENDOR variable.
19 >>>>
20 >>>> EGO_VENDOR eliminates to need to generate and host monolithic tarballs
21 >>>> containing vendored dependencies. It's more space-efficient in the sense
22 >>>> that each vendored dependency is stored in a separate tarball, so
23 >>>> multiple ebuilds can share the same tarball if the version of a
24 >>>> particular vendored dependency has not changed.
25 >>>
26 >>> I see what you are saying, but I haven't yet found a way to generate
27 >>> these separate tarballs that I'm comfortable with. Also, thinking about
28 >>> this, there will be many more tarballs on our mirrors if we store one
29 >>> dependency in each tarball than if we generate vendor tarballs that
30 >>> contain all dependencies for a package.
31 >>>
32 >>> I would consider this an enhancement to the eclass if you still feel
33 >>> that we need it, but let me get the eclass into the tree first then we
34 >>> can work on that.
35 >>>
36 >>
37 >> That sounds like a bad idea. If there are any potential enhancements
38 >> that can happen, I'd rather see them happen before there's a bunch of
39 >> ebuilds using the eclass in the wild, and potentially limiting possible
40 >> changes.
41 >
42 > Like I just said on IRC, it would have been better if you responded in
43 > terms of discussing the enhancement itself.
44 >
45 > The main blocker for me is that EGO_VENDOR is basically the same
46 > information as go.mod, but it isn't quite the same format.
47 > You can get close with "go list -m all", but EGO_VENDOR doesn't
48 > automatically handle imports that start with things like golang.org/x or
49 > gopkg.in; you have to manually fix those, and you would have to do that
50 > every time. That seems to be a lot of work for little gain.
51
52 It looks like it should not be too difficult to create a script that
53 will convert from go.mod to EGO_VENDOR format. For example, take this
54 go.mod file:
55
56 https://github.com/golang/tools/blob/master/go.mod
57
58 It contains a line like this:
59
60 golang.org/x/net v0.0.0-20190620200207-3b0461eec859
61
62 The part after the last hyphen corresponds to the commit hash which can
63 be used directly or expanded like this:
64
65 $ curl -sS https://api.github.com/repos/golang/net/commits/3b0461eec859 | jq -r .sha
66 3b0461eec859c4b73bb64fdc8285971fd33e3938
67
68 The github owner and repo names can resolved like this:
69
70 $ curl -sS https://golang.org/x/net | grep go-source
71 <meta name="go-source" content="golang.org/x/net https://github.com/golang/net/ https://github.com/golang/net/tree/master{/dir} https://github.com/golang/net/blob/master{/dir}/{file}#L{line}">
72
73 I've found that `go get` parses a similar meta element named "go-import"
74 here:
75
76 https://github.com/golang/go/blob/master/src/cmd/go/internal/get/discovery.go
77 --
78 Thanks,
79 Zac

Attachments

File name MIME type
signature.asc application/pgp-signature