Make defaulting optional during conversion generation

Set the Kubernetes default to "no defaulting"
This commit is contained in:
Clayton Coleman 2016-09-25 12:08:19 -04:00
parent 4f8d1a86e5
commit f294175d60
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
2 changed files with 12 additions and 3 deletions

View File

@ -36,6 +36,10 @@ import (
// generator. // generator.
type CustomArgs struct { type CustomArgs struct {
ExtraPeerDirs []string // Always consider these as last-ditch possibilities for conversions. ExtraPeerDirs []string // Always consider these as last-ditch possibilities for conversions.
// SkipDefaulters indicates whether defaulter functions should be a part of conversion
// This field was introduced to ease the transition to removing defaulters from conversion.
// It will be removed in 1.6.
SkipDefaulters bool
} }
// This is the comment tag that carries parameters for conversion generation. // This is the comment tag that carries parameters for conversion generation.
@ -242,10 +246,12 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
glog.V(5).Infof(" no tag") glog.V(5).Infof(" no tag")
continue continue
} }
skipDefaulters := false
if customArgs, ok := arguments.CustomArgs.(*CustomArgs); ok { if customArgs, ok := arguments.CustomArgs.(*CustomArgs); ok {
if len(customArgs.ExtraPeerDirs) > 0 { if len(customArgs.ExtraPeerDirs) > 0 {
peerPkgs = append(peerPkgs, customArgs.ExtraPeerDirs...) peerPkgs = append(peerPkgs, customArgs.ExtraPeerDirs...)
} }
skipDefaulters = customArgs.SkipDefaulters
} }
// Make sure our peer-packages are added and fully parsed. // Make sure our peer-packages are added and fully parsed.
for _, pp := range peerPkgs { for _, pp := range peerPkgs {
@ -261,7 +267,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
HeaderText: header, HeaderText: header,
GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
return []generator.Generator{ return []generator.Generator{
NewGenConversion(arguments.OutputFileBaseName, pkg.Path, manualConversions, manualDefaults, peerPkgs), NewGenConversion(arguments.OutputFileBaseName, pkg.Path, manualConversions, manualDefaults, peerPkgs, !skipDefaulters),
} }
}, },
FilterFunc: func(c *generator.Context, t *types.Type) bool { FilterFunc: func(c *generator.Context, t *types.Type) bool {
@ -307,9 +313,10 @@ type genConversion struct {
imports namer.ImportTracker imports namer.ImportTracker
types []*types.Type types []*types.Type
skippedFields map[*types.Type][]string skippedFields map[*types.Type][]string
includeDefaulters bool
} }
func NewGenConversion(sanitizedName, targetPackage string, manualConversions conversionFuncMap, manualDefaulters defaulterFuncMap, peerPkgs []string) generator.Generator { func NewGenConversion(sanitizedName, targetPackage string, manualConversions conversionFuncMap, manualDefaulters defaulterFuncMap, peerPkgs []string, includeDefaulters bool) generator.Generator {
return &genConversion{ return &genConversion{
DefaultGen: generator.DefaultGen{ DefaultGen: generator.DefaultGen{
OptionalName: sanitizedName, OptionalName: sanitizedName,
@ -321,6 +328,7 @@ func NewGenConversion(sanitizedName, targetPackage string, manualConversions con
imports: generator.NewImportTracker(), imports: generator.NewImportTracker(),
types: []*types.Type{}, types: []*types.Type{},
skippedFields: map[*types.Type][]string{}, skippedFields: map[*types.Type][]string{},
includeDefaulters: includeDefaulters,
} }
} }
@ -470,7 +478,7 @@ func (g *genConversion) generateConversion(inType, outType *types.Type, sw *gene
sw.Do("func auto"+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args) sw.Do("func auto"+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args)
// if no defaulter of form SetDefaults_XXX is defined, do not inline a check for defaulting. // if no defaulter of form SetDefaults_XXX is defined, do not inline a check for defaulting.
if function, ok := g.manualDefaulters[inType]; ok { if function, ok := g.manualDefaulters[inType]; ok && g.includeDefaulters {
sw.Do("$.|raw$(in)\n", function) sw.Do("$.|raw$(in)\n", function)
} }
g.generateFor(inType, outType, sw) g.generateFor(inType, outType, sw)

View File

@ -60,6 +60,7 @@ func main() {
"k8s.io/kubernetes/pkg/conversion", "k8s.io/kubernetes/pkg/conversion",
"k8s.io/kubernetes/pkg/runtime", "k8s.io/kubernetes/pkg/runtime",
}, },
SkipDefaulters: true,
} }
pflag.CommandLine.StringSliceVar(&customArgs.ExtraPeerDirs, "extra-peer-dirs", customArgs.ExtraPeerDirs, pflag.CommandLine.StringSliceVar(&customArgs.ExtraPeerDirs, "extra-peer-dirs", customArgs.ExtraPeerDirs,
"Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.")