-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/go: 'mod tidy' sometimes adds new, unnecessary require sections #67948
Comments
/cc @matloob @samthanawalla per owners |
I can probably offer another example: https://github.com/siemens/turtlefinder/blob/f21b66938827bb8d9ec1a720b34c870465e5620e/go.mod The third require section in this case has even a mix of direct and indirect if I understand it correctly. |
Combine into direct and indirect sections. See golang/go#67948 for why this is a mess. Enables running `go mod tidy` without blowing up things.
Combine into direct and indirect sections. See golang/go#67948 for why this is a mess. Enables running `go mod tidy` without blowing up things.
I just had a chance to look into this. On the So when the second block is removed, there's a block with all direct requirements, and one that's a mix. @cespare Is this also the case for your go.mod file at work? Are the direct and indirect blocks all direct and all indirect before @thediveo Yes, |
@matloob Ah! You're correct. In my private go.mod there are two direct requirements hidden amongst 53 indirect requirements and I missed them. I'm not sure how they got there but it seems likely it was due to human editing of the file. (If I simply add a new direct import of a previously-indirect dependency, I verified that Anyway, I think this bug is invalid but it'd still be great to see #56471 happen. |
I think this issue gives some support that we should do something. I think we have evidence that it's easy to get into a confusing state (having a requirement marked direct buried among requirements marked indirect) and we should have a better way to get out of it. |
Is the three block design intended, als if so, why? Or should it be always only two blocks? |
@thediveo The design we have was intended: we wanted to allow users to be able to define their own sections that we'd leave alone. So we only modify the all-direct and all-indirect sections. But I think it's probably the case that most people don't want the third section. I think we'll need to figure out if anyone's intentionally using the functionality that maintains the third section and if not, maybe change the default to always produce two sections. See #56471 (comment). |
Go version
go version go1.22.3 linux/amd64
Output of
go env
in your module/workspace:What did you do?
This is spun off of #56471. That proposal suggests having
go mod tidy
automatically join multiplerequire
sections. However, there's an underlying bug wherego mod tidy
itself is often responsible for these multiple sections. This issue is about the bug.On a large private Go module at work, we have three
require
sections. These were all created bygo mod tidy
. The first one has direct dependencies and the second and thirdrequire
sections have indirect dependencies.We can reproduce the error easily: if we delete the second
require
section (the first of the two indirect sections) and then rungo mod tidy
, it recreates the separate indirectrequire
section rather than adding the missing entries to the existingrequire
section.I cannot share the work code, but by looking through issues linked to #56471, I located a public repo where the same issue occurred. Here's how to reproduce the issue using that repo:
What did you see happen?
go mod tidy
added a new extra indirectrequire
section.What did you expect to see?
I would expect
go mod tidy
to add entries to the existingrequire
section.More generally: if I only ever edit go.mod automatically, never by hand, I would expect the Go tool to maintain at most two
require
sections (one direct and one indirect).Note that it is somewhat possible to work around the issue. If you manually join the two
require
sections,go mod tidy
will keep them together as one large section (it won't split them up). But this manual work shouldn't be required. Also, it's only temporary: future additions to the code may causego mod tidy
to add new sections togo.mod
.The text was updated successfully, but these errors were encountered: