Hi Scott,

Regarding your comment, a related issue (which is still open) is this one:

   #26955: “cmd/go: provide straightforward way to see non-test dependencies”
  https://github.com/golang/go/issues/26955

--thepudds 
________________________________
Terseness courtesy of my mobile device

> On Sep 29, 2018, at 9:53 AM, Scott Cotton <w...@iri-labs.com> wrote:
> 
> Hi all,
> 
> I think this is related to https://github.com/golang/go/issues/26913 which is 
> closed but still has commentary that seems unresolved after it was closed .
> 
> Scott
> 
> 
>> On Friday, 28 September 2018 20:11:29 UTC+2, Harmen wrote:
>> On Fri, Sep 28, 2018 at 10:19:50AM -0700, thepud...@gmail.com wrote: 
>> > Hi Harmen, 
>> > 
>> > And my first sentence might not have been clear. When I said "even in your 
>> > current situation, 'go build' is still pulling in exactly what it needs", 
>> > I 
>> > was trying to reference the actual compilation process. 
>> > 
>> > In other words, I was just trying to make it clear that even if you have 
>> > "extra" dependencies appearing in your go.mod file, the resulting binary 
>> > produced by 'go build' does not have anything extra or any unused 
>> > dependencies. 
>> 
>> Hi thepudds, 
>> thanks for your anwers. 
>> 
>> It doesn't hurt per-se, but all those unused modules will be vendored in the 
>> repo (or the CI will have to download them every time). Maybe the consul 
>> repo 
>> is a particularly unlucky repo, since the /api package is small compared to 
>> the 
>> rest of the repo, but still. 
>> 
>> As for the argument that it's for test reproducibility, I do not follow 
>> that. 
>> Everything to test /api is there, and the stuff I don't import doesn't need 
>> to 
>> be tested in the first place. 
>> 
>> > In any event, I wanted to share at least my personal understanding, but of 
>> > course happy to learn more... 
>> 
>> I'm trying to do the same :) 
>> Thanks! 
>> 
>> > 
>> > --thepudds 
>> > 
>> > 
>> > On Friday, September 28, 2018 at 1:00:17 PM UTC-4, thepud...@gmail.com 
>> > wrote: 
>> > > 
>> > >  > "So if consul adds a go.mod file in the root, then `mod tidy` will 
>> > > suddenly 
>> > > behave as I would expect (i.e. not pull in unused dependencies)? " 
>> > > 
>> > > Hi Harmen, 
>> > > 
>> > > Just in case this isn't already clear-- note that even in your current 
>> > > situation, 'go build' is still pulling in exactly what it needs (and not 
>> > > pulling in unused dependencies). 
>> > > 
>> > > I think there is not a significant harm in your go.mod containing these 
>> > > indirect dependencies (aside from of course seeing that longer list, 
>> > > etc.). 
>> > > 
>> > > And there is some benefit -- this behavior is part of what provides for 
>> > > 100% reproducible builds and tests. The modules system records precise 
>> > > dependency version information, and in your case, that precise 
>> > > dependency 
>> > > version information for some of your indirect dependencies is being 
>> > > recorded in your go.mod (given that it is not yet recorded in the 
>> > > non-existent go.mod of some of your direct dependencies).   
>> > > 
>> > > As an example, this behavior helps make sure that `go test all` is 100% 
>> > > reproducible for you (where `go test all` runs tests for both your 
>> > > module, 
>> > > your direct dependencies, and your indirect dependencies, which is 
>> > > valuable 
>> > > as one way of validating that the currently selected packages versions 
>> > > are 
>> > > compatible -- the number of possible version combinations is exponential 
>> > > in 
>> > > the number of modules, so in general you cannot expect your dependencies 
>> > > to 
>> > > have tested against all possible combinations of *their* dependencies). 
>> > > 
>> > > --thepudds 
>> > > 
>> > > On Friday, September 28, 2018 at 12:48:20 PM UTC-4, Harmen wrote: 
>> > >> 
>> > >> On Fri, Sep 28, 2018 at 04:48:32PM +0100, Paul Jolly wrote: 
>> > >> > Hi Harmen 
>> > >> > 
>> > >> > I described the problem on https://github.com/golang/go/issues/27920, 
>> > >> which 
>> > >> > > got 
>> > >> > > closed within three minutes as being "documented", and "works as 
>> > >> > > expected" (which I assume also means "works as intended"). 
>> > >> > > Is this really the intented behaviour? It seems unexpected to me. 
>> > >> > > Or 
>> > >> > > should I 
>> > >> > > simply stay away from `go mod tidy`? 
>> > >> > > 
>> > >> > 
>> > >> > I replied to your issue earlier. But could arguably have been 
>> > >> > slightly 
>> > >> more 
>> > >> > detailed in my response beyond simply linking to 
>> > >> > 
>> > >> https://github.com/golang/go/wiki/Modules#why-does-go-mod-tidy-record-indirect-and-test-dependencies-in-my-gomod
>> > >>  
>> > >> > 
>> > >> > As you note, github.com/hashicorp/consul/api is a package. It is a 
>> > >> package 
>> > >> > in the module github.com/hashicorp/consul. Despite there being no 
>> > >> go.mod in 
>> > >> > github.com/hashicorp/consul, the go tool simulates it as a module. 
>> > >> > 
>> > >> > Given there are no go.mod files in any subdirectories below 
>> > >> > github.com/hashicorp/consul, then github.com/hashicorp/consul is the 
>> > >> module 
>> > >> > for all the packages github.com/hashicorp/consul/... 
>> > >> > 
>> > >> > Hence go mod tidy (per the link in my response to your issue) is 
>> > >> pulling 
>> > >> > in the transitive dependencies needed for tests in 
>> > >> > github.com/hashicorp/consul/... The reason you see all of these in 
>> > >> your 
>> > >> > go.mod is that github.com/hashicorp/consul has not yet been converted 
>> > >> to a 
>> > >> > module as yet. 
>> > >> > 
>> > >> > Hopefully that gives a bit more colour on what's going on here. 
>> > >> 
>> > >> Hi Paul, 
>> > >> 
>> > >> thanks for your extended reply. 
>> > >> 
>> > >> So if consul adds a go.mod file in the root, then `mod tidy` will 
>> > >> suddenly 
>> > >> behave as I would expect (i.e. not pull in unused dependencies)? And 
>> > >> until they 
>> > >> add it (if ever) I either better not run `mod tidy`, or simply go back 
>> > >> to 
>> > >> the 
>> > >> old dep system? 
>> > >> 
>> > > 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "golang-nuts" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/golang-nuts/Cl--P02fCjw/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to