From c4b192b67b0491d303aa7863798d30b3f0b16a93 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 24 Apr 2016 19:11:54 -0400 Subject: [PATCH 1/2] Protobuf generation should strip empty-imports The imports are generated because the packages are in the search tree, but nothing in the generated code needs them. For now, strip them. --- .../go2idl/go-to-protobuf/protobuf/parser.go | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/cmd/libs/go2idl/go-to-protobuf/protobuf/parser.go b/cmd/libs/go2idl/go-to-protobuf/protobuf/parser.go index 4da6e070730..4ac4b86a37d 100644 --- a/cmd/libs/go2idl/go-to-protobuf/protobuf/parser.go +++ b/cmd/libs/go2idl/go-to-protobuf/protobuf/parser.go @@ -81,9 +81,13 @@ func RewriteGeneratedGogoProtobufFile(name string, extractFn ExtractFunc, header // remove types that are already declared decls := []ast.Decl{} for _, d := range file.Decls { - if !dropExistingTypeDeclarations(d, extractFn) { - decls = append(decls, d) + if dropExistingTypeDeclarations(d, extractFn) { + continue } + if dropEmptyImportDeclarations(d) { + continue + } + decls = append(decls, d) } file.Decls = decls @@ -93,6 +97,8 @@ func RewriteGeneratedGogoProtobufFile(name string, extractFn ExtractFunc, header }) } +// dropExistingTypeDeclarations removes any type declaration for which extractFn returns true. The function +// returns true if the entire declaration should be dropped. func dropExistingTypeDeclarations(decl ast.Decl, extractFn ExtractFunc) bool { switch t := decl.(type) { case *ast.GenDecl: @@ -117,6 +123,33 @@ func dropExistingTypeDeclarations(decl ast.Decl, extractFn ExtractFunc) bool { return false } +// dropEmptyImportDeclarations strips any generated but no-op imports from the generated code +// to prevent generation from being able to define side-effects. The function returns true +// if the entire declaration should be dropped. +func dropEmptyImportDeclarations(decl ast.Decl) bool { + switch t := decl.(type) { + case *ast.GenDecl: + if t.Tok != token.IMPORT { + return false + } + specs := []ast.Spec{} + for _, s := range t.Specs { + switch spec := s.(type) { + case *ast.ImportSpec: + if spec.Name != nil && spec.Name.Name == "_" { + continue + } + specs = append(specs, spec) + } + } + if len(specs) == 0 { + return true + } + t.Specs = specs + } + return false +} + func RewriteTypesWithProtobufStructTags(name string, structTags map[string]map[string]string) error { return rewriteFile(name, []byte{}, func(fset *token.FileSet, file *ast.File) error { allErrs := []error{} From 99430cf5dedd9965db7f2fb665df3b427b4f1cda Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 24 Apr 2016 19:14:03 -0400 Subject: [PATCH 2/2] Strip side-effect imports from generated protobuf --- federation/apis/federation/v1alpha1/generated.pb.go | 3 +-- pkg/api/resource/generated.pb.go | 2 -- pkg/api/unversioned/generated.pb.go | 2 -- pkg/api/v1/generated.pb.go | 2 +- pkg/apis/apps/v1alpha1/generated.pb.go | 4 +--- pkg/apis/autoscaling/v1/generated.pb.go | 5 +---- pkg/apis/batch/v1/generated.pb.go | 4 +--- pkg/apis/extensions/v1beta1/generated.pb.go | 1 - pkg/runtime/generated.pb.go | 3 --- pkg/util/intstr/generated.pb.go | 1 - pkg/watch/versioned/generated.pb.go | 3 --- 11 files changed, 5 insertions(+), 25 deletions(-) diff --git a/federation/apis/federation/v1alpha1/generated.pb.go b/federation/apis/federation/v1alpha1/generated.pb.go index 2256cb03022..faa12e20252 100644 --- a/federation/apis/federation/v1alpha1/generated.pb.go +++ b/federation/apis/federation/v1alpha1/generated.pb.go @@ -37,11 +37,10 @@ package v1alpha1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" + import k8s_io_kubernetes_pkg_api_resource "k8s.io/kubernetes/pkg/api/resource" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io" diff --git a/pkg/api/resource/generated.pb.go b/pkg/api/resource/generated.pb.go index 671ddb19cf6..7484f92761a 100644 --- a/pkg/api/resource/generated.pb.go +++ b/pkg/api/resource/generated.pb.go @@ -33,8 +33,6 @@ package resource import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io" diff --git a/pkg/api/unversioned/generated.pb.go b/pkg/api/unversioned/generated.pb.go index b28049226e0..cb9803552ed 100644 --- a/pkg/api/unversioned/generated.pb.go +++ b/pkg/api/unversioned/generated.pb.go @@ -55,8 +55,6 @@ package unversioned import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/util/intstr" import time "time" diff --git a/pkg/api/v1/generated.pb.go b/pkg/api/v1/generated.pb.go index c6c82b388cf..e8f4fe2fe89 100644 --- a/pkg/api/v1/generated.pb.go +++ b/pkg/api/v1/generated.pb.go @@ -170,7 +170,7 @@ package v1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" + import k8s_io_kubernetes_pkg_api_resource "k8s.io/kubernetes/pkg/api/resource" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_runtime "k8s.io/kubernetes/pkg/runtime" diff --git a/pkg/apis/apps/v1alpha1/generated.pb.go b/pkg/apis/apps/v1alpha1/generated.pb.go index 04c9fe1a094..88f1bcd4073 100644 --- a/pkg/apis/apps/v1alpha1/generated.pb.go +++ b/pkg/apis/apps/v1alpha1/generated.pb.go @@ -35,11 +35,9 @@ package v1alpha1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/api/resource" + import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io" diff --git a/pkg/apis/autoscaling/v1/generated.pb.go b/pkg/apis/autoscaling/v1/generated.pb.go index f2a2b5cfa25..e90dd5d62c7 100644 --- a/pkg/apis/autoscaling/v1/generated.pb.go +++ b/pkg/apis/autoscaling/v1/generated.pb.go @@ -39,11 +39,8 @@ package v1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/api/resource" -import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" -import _ "k8s.io/kubernetes/pkg/util/intstr" +import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import io "io" diff --git a/pkg/apis/batch/v1/generated.pb.go b/pkg/apis/batch/v1/generated.pb.go index 2fac800ac70..95646919d8c 100644 --- a/pkg/apis/batch/v1/generated.pb.go +++ b/pkg/apis/batch/v1/generated.pb.go @@ -38,11 +38,9 @@ package v1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/api/resource" + import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io" diff --git a/pkg/apis/extensions/v1beta1/generated.pb.go b/pkg/apis/extensions/v1beta1/generated.pb.go index 4b6359fc36c..bcf1f28ec3d 100644 --- a/pkg/apis/extensions/v1beta1/generated.pb.go +++ b/pkg/apis/extensions/v1beta1/generated.pb.go @@ -92,7 +92,6 @@ package v1beta1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" diff --git a/pkg/runtime/generated.pb.go b/pkg/runtime/generated.pb.go index 2a177b48041..28926848363 100644 --- a/pkg/runtime/generated.pb.go +++ b/pkg/runtime/generated.pb.go @@ -34,9 +34,6 @@ package runtime import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "k8s.io/kubernetes/pkg/api/resource" -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io" diff --git a/pkg/util/intstr/generated.pb.go b/pkg/util/intstr/generated.pb.go index 8b72c612689..ef39cd58655 100644 --- a/pkg/util/intstr/generated.pb.go +++ b/pkg/util/intstr/generated.pb.go @@ -32,7 +32,6 @@ package intstr import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" import io "io" diff --git a/pkg/watch/versioned/generated.pb.go b/pkg/watch/versioned/generated.pb.go index 2597fbc99f1..c1cbbd8ba56 100644 --- a/pkg/watch/versioned/generated.pb.go +++ b/pkg/watch/versioned/generated.pb.go @@ -32,9 +32,6 @@ package versioned import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import _ "github.com/gogo/protobuf/gogoproto" - -import _ "k8s.io/kubernetes/pkg/util/intstr" import io "io"