Make defaulting optional during conversion generation
Set the Kubernetes default to "no defaulting"
This commit is contained in:
		@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user