Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bundle: new docs, command-line interface
Before, "bundle -help" printed only one not particularly useful line: Usage of bundle: and "bundle" printed a bit more but not a standard usage message: bundle: Usage: bundle package dest prefix Arguments: package is the import path of the package to concatenate. dest is the import path of the package in which the resulting file will reside. prefix is the string to attach to all renamed identifiers. And most of that output belonged in (but was missing from) the doc comment, which leaned heavily on the reader inferring usage from one example. While fixing all this, I ended up dropping "dest" and "prefix" as required arguments: perfectly good defaults can be inferred in the common case where the bundle is intended for the current directory. The defaults can be overridden with the new -dst and -prefix option. I corrected a TODO about not assuming the package name could be derived from the destination import path. Like -dst and -prefix, the default package name can be inferred from the current directory, but there is also a new -pkg option to override the default if needed. I added a -o option to specify the destination output file (standard output is still the default output). One benefit of -o is that it makes the bundle commands self-contained in the sense of not needing a shell. That in turn makes them suitable for use with "go generate", so when -o is specified the bundle output now includes a "//go:generate" comment for updating the bundle mechanically. To keep bundle working for net/http's use case, I added a -importmap option to specify additional import rewrites (net/http needs the http2 import of golang.org/x/net/http2/hpack rewritten to begin with internal/golang.org). The net effect of all of this is that the first two lines at the top of net/http/h2_bundle.go will change from: // Code generated by golang.org/x/tools/cmd/bundle command: // $ bundle golang.org/x/net/http2 net/http http2 to // Code generated by golang.org/x/tools/cmd/bundle. //go:generate bundle -o h2_bundle.go -prefix http2 -import golang.org/x/net/http2/hpack=internal/golang.org/x/net/http2/hpack golang.org/x/net/http2 and net/http's copy of http2 can now be updated by "go generate" instead of by copying and pasting commands from source code to shell. For an experiment I am doing with cmd/dist bundling archive/zip, the header is even shorter and makes a better demonstration of the power of the defaults: // Code generated by golang.org/x/tools/cmd/bundle. //go:generate bundle -o zip.go archive/zip New usage message, printed by "bundle -help" and "bundle": Usage: bundle [options] <src> -dst path set destination import path (default taken from current directory) -import map rewrite import using map, of form old=new (can be repeated) -o file write output to file (default standard output) -pkg name set destination package name (default taken from current directory) -prefix p set bundled identifier prefix to p (default source package name + "_") See CL for new doc comment. Following this CL I will send a CL updating the two-line header in net/http/h2_bundle.go to match the new usage of the bundle, whatever that ends up being. Change-Id: I83a65b6a500897854027cefdefb8f62f1d4448b4 Reviewed-on: https://go-review.googlesource.com/19428 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
- Loading branch information