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(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "expansion.go",
 | 
			
		||||
        "lister.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], "/")
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		packageList = append(packageList, &generator.DefaultPackage{
 | 
			
		||||
			PackageName: strings.ToLower(gv.Version.NonEmpty()),
 | 
			
		||||
			PackagePath: filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty())),
 | 
			
		||||
			HeaderText:  boilerplate,
 | 
			
		||||
			GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
 | 
			
		||||
		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{
 | 
			
		||||
			PackageName: strings.ToLower(gv.Version.NonEmpty()),
 | 
			
		||||
			PackagePath: packagePath,
 | 
			
		||||
			HeaderText:  boilerplate,
 | 
			
		||||
			GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
 | 
			
		||||
				generators = append(generators, &expansionGenerator{
 | 
			
		||||
					DefaultGen: generator.DefaultGen{
 | 
			
		||||
						OptionalName: "expansion_generated",
 | 
			
		||||
					},
 | 
			
		||||
					packagePath: filepath.Join(arguments.OutputBase, packagePath),
 | 
			
		||||
					types:       typesToGenerate,
 | 
			
		||||
				})
 | 
			
		||||
 | 
			
		||||
				for _, t := range typesToGenerate {
 | 
			
		||||
					generators = append(generators, &listerGenerator{
 | 
			
		||||
						DefaultGen: generator.DefaultGen{
 | 
			
		||||
							OptionalName: arguments.OutputFileBaseName + "." + strings.ToLower(t.Name.Name),
 | 
			
		||||
							OptionalName: strings.ToLower(t.Name.Name),
 | 
			
		||||
						},
 | 
			
		||||
						outputPackage:  arguments.OutputPackagePath,
 | 
			
		||||
						groupVersion:   gv,
 | 
			
		||||
@@ -248,6 +264,7 @@ type $.type|public$Lister interface {
 | 
			
		||||
	List(selector labels.Selector) (ret []*$.type|raw$, err error)
 | 
			
		||||
	// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
 | 
			
		||||
	$.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)
 | 
			
		||||
	// Get retrieves the $.type|public$ from the index for a given name.
 | 
			
		||||
	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)
 | 
			
		||||
	// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
 | 
			
		||||
	Get(name string) (*$.type|raw$, error)
 | 
			
		||||
	$.type|public$NamespaceListerExpansion
 | 
			
		||||
}
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ func main() {
 | 
			
		||||
		OutputBase:        args.DefaultSourceTree(),
 | 
			
		||||
		GoHeaderFilePath:  filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
 | 
			
		||||
		GeneratedBuildTag: "ignore_autogenerated",
 | 
			
		||||
		OutputFileBaseName: "zz_generated",
 | 
			
		||||
		OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
 | 
			
		||||
	}
 | 
			
		||||
	arguments.AddFlags(pflag.CommandLine)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user