diff options
author | Rob Pike <r@golang.org> | 2012-10-04 11:35:17 +1000 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2012-10-04 11:35:17 +1000 |
commit | 335409b95dad4698716115c73d57cb5d3b9fb0d5 (patch) | |
tree | 7a0de243f295a20d79cc49eff59caef74fc79bff | |
parent | 9f9ff685cb56eb1b8c6aebdf6ed756f35993f088 (diff) | |
download | go-335409b95dad4698716115c73d57cb5d3b9fb0d5.tar.gz |
cmd/api: add exception file
Fixes build.
R=golang-dev, adg, bradfitz, dsymonds, dave
CC=golang-dev
http://codereview.appspot.com/6586074
-rw-r--r-- | api/README | 3 | ||||
-rw-r--r-- | api/except.txt | 2 | ||||
-rw-r--r-- | src/cmd/api/goapi.go | 27 | ||||
-rwxr-xr-x | src/run.bash | 2 |
4 files changed, 26 insertions, 8 deletions
diff --git a/api/README b/api/README index 6adc55454..34b86efd9 100644 --- a/api/README +++ b/api/README @@ -5,6 +5,9 @@ Each file is a list of of API features, one per line. go1.txt (and similarly named files) are frozen once a version has been shipped. Each file adds new lines but does not remove any. +except.txt lists features that may disappear without breaking +true compatibility. The only package there is text/template/parse. + next.txt is the only file intended to be mutated. It's a list of features that may be added to the next version. It only affects warning output from the go api tool. diff --git a/api/except.txt b/api/except.txt new file mode 100644 index 000000000..e9fb24b46 --- /dev/null +++ b/api/except.txt @@ -0,0 +1,2 @@ +pkg text/template/parse, type DotNode bool +pkg text/template/parse, type Node interface { Copy, String, Type } diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go index 7463e20d6..391cbe76f 100644 --- a/src/cmd/api/goapi.go +++ b/src/cmd/api/goapi.go @@ -38,11 +38,12 @@ import ( var ( // TODO(bradfitz): once Go 1.1 comes out, allow the -c flag to take a comma-separated // list of files, rather than just one. - checkFile = flag.String("c", "", "optional filename to check API against") - allowNew = flag.Bool("allow_new", true, "allow API additions") - nextFile = flag.String("next", "", "optional filename of tentative upcoming API features for the next release. This file can be lazily maintained. It only affects the delta warnings from the -c file printed on success.") - verbose = flag.Bool("v", false, "verbose debugging") - forceCtx = flag.String("contexts", "", "optional comma-separated list of <goos>-<goarch>[-cgo] to override default contexts.") + checkFile = flag.String("c", "", "optional filename to check API against") + allowNew = flag.Bool("allow_new", true, "allow API additions") + exceptFile = flag.String("except", "", "optional filename of packages that are allowed to change without triggering a failure in the tool") + nextFile = flag.String("next", "", "optional filename of tentative upcoming API features for the next release. This file can be lazily maintained. It only affects the delta warnings from the -c file printed on success.") + verbose = flag.Bool("v", false, "verbose debugging") + forceCtx = flag.String("contexts", "", "optional comma-separated list of <goos>-<goarch>[-cgo] to override default contexts.") ) // contexts are the default contexts which are scanned, unless @@ -198,6 +199,13 @@ func main() { } } + var exception = make(map[string]bool) // exception => true + if *exceptFile != "" { + for _, feature := range fileFeatures(*exceptFile) { + exception[feature] = true + } + } + take := func(sl *[]string) string { s := (*sl)[0] *sl = (*sl)[1:] @@ -207,8 +215,13 @@ func main() { for len(required) > 0 || len(features) > 0 { switch { case len(features) == 0 || required[0] < features[0]: - fmt.Fprintf(bw, "-%s\n", take(&required)) - fail = true // broke compatibility + feature := take(&required) + if exception[feature] { + fmt.Fprintf(bw, "~%s\n", feature) + } else { + fmt.Fprintf(bw, "-%s\n", feature) + fail = true // broke compatibility + } case len(required) == 0 || required[0] > features[0]: newFeature := take(&features) if optional[newFeature] { diff --git a/src/run.bash b/src/run.bash index f379ff5a7..1859555fb 100755 --- a/src/run.bash +++ b/src/run.bash @@ -112,7 +112,7 @@ time go run run.go echo echo '# Checking API compatibility.' -go tool api -c $GOROOT/api/go1.txt -next $GOROOT/api/next.txt +go tool api -c $GOROOT/api/go1.txt -next $GOROOT/api/next.txt -except $GOROOT/api/except.txt echo echo ALL TESTS PASSED |