4c7a8d63e4
When rewriting a go.mod file, we currently sort all of the require lines in a block. The way the parser works is that it considers preceding blank lines to be empty comment lines, and preceding empty comment lines are "owned" by their adjoining line. So when we go to sort them, the empty lines follow around each sorted entry, which doesn't make a whole lot of sense, since usually vertical space is inserted to show sections, and if things get moved around by sorting, those sections are no longer meaningful. This all results in one especially troublesome edge case: blank lines between a block opening ("require (") and the first block line ("golang.org/x/sys ...") are not treated the same way and are rewritten out of existence. Here's an example of the behavior this fixes. Starting input file: require ( golang.zx2c4.com/wireguard master golang.org/x/crypto latest golang.org/x/net latest golang.org/x/sys latest golang.org/x/text latest github.com/lxn/walk latest github.com/lxn/win latest ) Now we run this through `GOPROXY=direct go get -d`: require ( github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a golang.org/x/text v0.3.2 golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49 ) Notice how the blank lines before lxn/walk and x/crypto were preserved. Finally, we have this be rewritten yet again with a call to `go build`: require ( github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a golang.org/x/text v0.3.2 golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49 ) In this final resting point, the first blank line has been removed. The discrepancy between those two last stages are especially bothersome, because it makes for lots of dirty git commits and file contents bouncing back and forth. This commit fixes the problem as mentioned above, getting rid of those preceding blank lines. The output in all cases looks as it should, like this: require ( github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a golang.org/x/text v0.3.2 golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49 ) Fixes #33779 Change-Id: I11c894440bd35f343ee62db3e06a50fa871f2599 Reviewed-on: https://go-review.googlesource.com/c/go/+/199917 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> |
||
---|---|---|
.github | ||
api | ||
doc | ||
lib/time | ||
misc | ||
src | ||
test | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
favicon.ico | ||
LICENSE | ||
PATENTS | ||
README.md | ||
robots.txt | ||
SECURITY.md |
The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Download and Install
Binary Distributions
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.