Update lister-gen
- Remove "zz_generated." prefix from generated lister file names - Add support for expansion interfaces
This commit is contained in:
		@@ -13,6 +13,7 @@ load(
 | 
				
			|||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "expansion.go",
 | 
				
			||||||
        "lister.go",
 | 
					        "lister.go",
 | 
				
			||||||
        "tags.go",
 | 
					        "tags.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										65
									
								
								cmd/libs/go2idl/lister-gen/generators/expansion.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								cmd/libs/go2idl/lister-gen/generators/expansion.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package generators
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/gengo/generator"
 | 
				
			||||||
 | 
						"k8s.io/gengo/types"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// expansionGenerator produces a file for a expansion interfaces.
 | 
				
			||||||
 | 
					type expansionGenerator struct {
 | 
				
			||||||
 | 
						generator.DefaultGen
 | 
				
			||||||
 | 
						packagePath string
 | 
				
			||||||
 | 
						types       []*types.Type
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We only want to call GenerateType() once per group.
 | 
				
			||||||
 | 
					func (g *expansionGenerator) Filter(c *generator.Context, t *types.Type) bool {
 | 
				
			||||||
 | 
						return t == g.types[0]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (g *expansionGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
 | 
				
			||||||
 | 
						sw := generator.NewSnippetWriter(w, c, "$", "$")
 | 
				
			||||||
 | 
						for _, t := range g.types {
 | 
				
			||||||
 | 
							if _, err := os.Stat(filepath.Join(g.packagePath, strings.ToLower(t.Name.Name+"_expansion.go"))); os.IsNotExist(err) {
 | 
				
			||||||
 | 
								sw.Do(expansionInterfaceTemplate, t)
 | 
				
			||||||
 | 
								namespaced := !extractBoolTagOrDie("nonNamespaced", t.SecondClosestCommentLines)
 | 
				
			||||||
 | 
								if namespaced {
 | 
				
			||||||
 | 
									sw.Do(namespacedExpansionInterfaceTemplate, t)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return sw.Error()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var expansionInterfaceTemplate = `
 | 
				
			||||||
 | 
					// $.|public$ListerExpansion allows custom methods to be added to
 | 
				
			||||||
 | 
					// $.|public$Lister.
 | 
				
			||||||
 | 
					type $.|public$ListerExpansion interface {}
 | 
				
			||||||
 | 
					`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var namespacedExpansionInterfaceTemplate = `
 | 
				
			||||||
 | 
					// $.|public$NamespaceListerExpansion allows custom methods to be added to
 | 
				
			||||||
 | 
					// $.|public$NamespaeLister.
 | 
				
			||||||
 | 
					type $.|public$NamespaceListerExpansion interface {}
 | 
				
			||||||
 | 
					`
 | 
				
			||||||
@@ -114,19 +114,35 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
 | 
				
			|||||||
			internalGVPkg = strings.Join(parts[0:len(parts)-1], "/")
 | 
								internalGVPkg = strings.Join(parts[0:len(parts)-1], "/")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var typesToGenerate []*types.Type
 | 
				
			||||||
 | 
							for _, t := range p.Types {
 | 
				
			||||||
 | 
								// filter out types which dont have genclient=true.
 | 
				
			||||||
 | 
								if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								typesToGenerate = append(typesToGenerate, t)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)}
 | 
				
			||||||
 | 
							typesToGenerate = orderer.OrderTypes(typesToGenerate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							packagePath := filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty()))
 | 
				
			||||||
		packageList = append(packageList, &generator.DefaultPackage{
 | 
							packageList = append(packageList, &generator.DefaultPackage{
 | 
				
			||||||
			PackageName: strings.ToLower(gv.Version.NonEmpty()),
 | 
								PackageName: strings.ToLower(gv.Version.NonEmpty()),
 | 
				
			||||||
			PackagePath: filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty())),
 | 
								PackagePath: packagePath,
 | 
				
			||||||
			HeaderText:  boilerplate,
 | 
								HeaderText:  boilerplate,
 | 
				
			||||||
			GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
 | 
								GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
 | 
				
			||||||
				for _, t := range p.Types {
 | 
									generators = append(generators, &expansionGenerator{
 | 
				
			||||||
					// filter out types which dont have genclient=true.
 | 
										DefaultGen: generator.DefaultGen{
 | 
				
			||||||
					if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
 | 
											OptionalName: "expansion_generated",
 | 
				
			||||||
						continue
 | 
										},
 | 
				
			||||||
					}
 | 
										packagePath: filepath.Join(arguments.OutputBase, packagePath),
 | 
				
			||||||
 | 
										types:       typesToGenerate,
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									for _, t := range typesToGenerate {
 | 
				
			||||||
					generators = append(generators, &listerGenerator{
 | 
										generators = append(generators, &listerGenerator{
 | 
				
			||||||
						DefaultGen: generator.DefaultGen{
 | 
											DefaultGen: generator.DefaultGen{
 | 
				
			||||||
							OptionalName: arguments.OutputFileBaseName + "." + strings.ToLower(t.Name.Name),
 | 
												OptionalName: strings.ToLower(t.Name.Name),
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						outputPackage:  arguments.OutputPackagePath,
 | 
											outputPackage:  arguments.OutputPackagePath,
 | 
				
			||||||
						groupVersion:   gv,
 | 
											groupVersion:   gv,
 | 
				
			||||||
@@ -248,6 +264,7 @@ type $.type|public$Lister interface {
 | 
				
			|||||||
	List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
						List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
				
			||||||
	// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
 | 
						// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
 | 
				
			||||||
	$.type|publicPlural$(namespace string) $.type|public$NamespaceLister
 | 
						$.type|publicPlural$(namespace string) $.type|public$NamespaceLister
 | 
				
			||||||
 | 
						$.type|public$ListerExpansion
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
`
 | 
					`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -258,6 +275,7 @@ type $.type|public$Lister interface {
 | 
				
			|||||||
	List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
						List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
				
			||||||
	// Get retrieves the $.type|public$ from the index for a given name.
 | 
						// Get retrieves the $.type|public$ from the index for a given name.
 | 
				
			||||||
	Get(name string) (*$.type|raw$, error)
 | 
						Get(name string) (*$.type|raw$, error)
 | 
				
			||||||
 | 
						$.type|public$ListerExpansion
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
`
 | 
					`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -314,6 +332,7 @@ type $.type|public$NamespaceLister interface {
 | 
				
			|||||||
	List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
						List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
				
			||||||
	// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
 | 
						// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
 | 
				
			||||||
	Get(name string) (*$.type|raw$, error)
 | 
						Get(name string) (*$.type|raw$, error)
 | 
				
			||||||
 | 
						$.type|public$NamespaceListerExpansion
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
`
 | 
					`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,11 +28,10 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	arguments := &args.GeneratorArgs{
 | 
						arguments := &args.GeneratorArgs{
 | 
				
			||||||
		OutputBase:         args.DefaultSourceTree(),
 | 
							OutputBase:        args.DefaultSourceTree(),
 | 
				
			||||||
		GoHeaderFilePath:   filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
 | 
							GoHeaderFilePath:  filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
 | 
				
			||||||
		GeneratedBuildTag:  "ignore_autogenerated",
 | 
							GeneratedBuildTag: "ignore_autogenerated",
 | 
				
			||||||
		OutputFileBaseName: "zz_generated",
 | 
							OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
 | 
				
			||||||
		OutputPackagePath:  "k8s.io/kubernetes/pkg/client/listers",
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	arguments.AddFlags(pflag.CommandLine)
 | 
						arguments.AddFlags(pflag.CommandLine)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user