client-gen: allow doc comment to override API group name
This commit is contained in:
		| @@ -63,7 +63,7 @@ func generatedBy(customArgs clientgenargs.Args) string { | ||||
| 	return fmt.Sprintf("\n// This package is generated by client-gen with the default arguments.\n\n") | ||||
| } | ||||
|  | ||||
| func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package { | ||||
| func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, inputPath string, boilerplate []byte, generatedBy string) generator.Package { | ||||
| 	outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version) | ||||
| 	return &generator.DefaultPackage{ | ||||
| 		PackageName: gv.Version, | ||||
| @@ -99,6 +99,7 @@ func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag | ||||
| 					OptionalName: normalization.BeforeFirstDot(gv.Group) + "_client", | ||||
| 				}, | ||||
| 				outputPackage: outputPackagePath, | ||||
| 				inputPacakge:  inputPath, | ||||
| 				group:         gv.Group, | ||||
| 				version:       gv.Version, | ||||
| 				types:         typeList, | ||||
| @@ -216,9 +217,10 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat | ||||
| 	orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} | ||||
| 	for _, gv := range customArgs.GroupVersions { | ||||
| 		types := gvToTypes[gv] | ||||
| 		packageList = append(packageList, packageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, boilerplate, generatedBy)) | ||||
| 		inputPath := customArgs.GroupVersionToInputPath[gv] | ||||
| 		packageList = append(packageList, packageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, inputPath, boilerplate, generatedBy)) | ||||
| 		if customArgs.FakeClient { | ||||
| 			packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, boilerplate, generatedBy)) | ||||
| 			packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, inputPath, boilerplate, generatedBy)) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/api/unversioned" | ||||
| ) | ||||
|  | ||||
| func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package { | ||||
| func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, inputPath string, boilerplate []byte, generatedBy string) generator.Package { | ||||
| 	outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version, "fake") | ||||
| 	// TODO: should make this a function, called by here and in client-generator.go | ||||
| 	realClientPath := filepath.Join(packageBasePath, gv.Group, gv.Version) | ||||
| @@ -55,6 +55,7 @@ func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag | ||||
| 					}, | ||||
| 					outputPackage: outputPackagePath, | ||||
| 					group:         normalization.BeforeFirstDot(gv.Group), | ||||
| 					inputPackage:  inputPath, | ||||
| 					version:       gv.Version, | ||||
| 					typeToMatch:   t, | ||||
| 					imports:       generator.NewImportTracker(), | ||||
|   | ||||
| @@ -31,6 +31,7 @@ type genFakeForType struct { | ||||
| 	generator.DefaultGen | ||||
| 	outputPackage string | ||||
| 	group         string | ||||
| 	inputPackage  string | ||||
| 	version       string | ||||
| 	typeToMatch   *types.Type | ||||
| 	imports       namer.ImportTracker | ||||
| @@ -87,6 +88,20 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. | ||||
| 	if canonicalVersion == "unversioned" { | ||||
| 		canonicalVersion = "" | ||||
| 	} | ||||
|  | ||||
| 	groupName := g.group | ||||
| 	if g.group == "core" { | ||||
| 		groupName = "" | ||||
| 	} | ||||
|  | ||||
| 	// allow user to define a group name that's different from the one parsed from the directory. | ||||
| 	for _, comment := range c.Universe.Package(g.inputPackage).DocComments { | ||||
| 		comment = strings.TrimLeft(comment, "//") | ||||
| 		if override, ok := types.ExtractCommentTags("+", comment)["groupName"]; ok { | ||||
| 			groupName = override | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	m := map[string]interface{}{ | ||||
| 		"type":                 t, | ||||
| 		"package":              pkg, | ||||
| @@ -94,6 +109,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. | ||||
| 		"namespaced":           namespaced, | ||||
| 		"Group":                namer.IC(g.group), | ||||
| 		"group":                canonicalGroup, | ||||
| 		"groupName":            groupName, | ||||
| 		"version":              canonicalVersion, | ||||
| 		"watchInterface":       c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/watch", Name: "Interface"}), | ||||
| 		"apiDeleteOptions":     c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "DeleteOptions"}), | ||||
| @@ -168,7 +184,7 @@ type Fake$.type|publicPlural$ struct { | ||||
| ` | ||||
|  | ||||
| var resource = ` | ||||
| var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.group$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"} | ||||
| var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"} | ||||
| ` | ||||
|  | ||||
| var listTemplate = ` | ||||
|   | ||||
| @@ -18,6 +18,7 @@ package generators | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"strings" | ||||
|  | ||||
| 	"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization" | ||||
| 	"k8s.io/kubernetes/cmd/libs/go2idl/generator" | ||||
| @@ -32,8 +33,9 @@ type genGroup struct { | ||||
| 	group         string | ||||
| 	version       string | ||||
| 	// types in this group | ||||
| 	types   []*types.Type | ||||
| 	imports namer.ImportTracker | ||||
| 	types        []*types.Type | ||||
| 	imports      namer.ImportTracker | ||||
| 	inputPacakge string | ||||
| } | ||||
|  | ||||
| var _ generator.Generator = &genGroup{} | ||||
| @@ -66,17 +68,22 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer | ||||
| 		return `"/apis"` | ||||
| 	} | ||||
|  | ||||
| 	canonize := func(group string) string { | ||||
| 		if group == "core" { | ||||
| 			return "" | ||||
| 	groupName := g.group | ||||
| 	if g.group == "core" { | ||||
| 		groupName = "" | ||||
| 	} | ||||
| 	// allow user to define a group name that's different from the one parsed from the directory. | ||||
| 	for _, comment := range c.Universe.Package(g.inputPacakge).DocComments { | ||||
| 		comment = strings.TrimLeft(comment, "//") | ||||
| 		if override, ok := types.ExtractCommentTags("+", comment)["groupName"]; ok && override != "" { | ||||
| 			groupName = override | ||||
| 		} | ||||
| 		return group | ||||
| 	} | ||||
|  | ||||
| 	m := map[string]interface{}{ | ||||
| 		"group":                      normalization.BeforeFirstDot(g.group), | ||||
| 		"Group":                      namer.IC(normalization.BeforeFirstDot(g.group)), | ||||
| 		"canonicalGroup":             canonize(g.group), | ||||
| 		"groupName":                  groupName, | ||||
| 		"types":                      g.types, | ||||
| 		"Config":                     c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}), | ||||
| 		"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}), | ||||
| @@ -190,7 +197,7 @@ func New(c *$.RESTClient|raw$) *$.Group$Client { | ||||
| var setInternalVersionClientDefaultsTemplate = ` | ||||
| func setConfigDefaults(config *$.Config|raw$) error { | ||||
| 	// if $.group$ group is not registered, return an error | ||||
| 	g, err := $.latestGroup|raw$("$.canonicalGroup$") | ||||
| 	g, err := $.latestGroup|raw$("$.groupName$") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -219,7 +226,7 @@ func setConfigDefaults(config *$.Config|raw$) error { | ||||
| var setClientDefaultsTemplate = ` | ||||
| func setConfigDefaults(config *$.Config|raw$) error { | ||||
| 	// if $.group$ group is not registered, return an error | ||||
| 	g, err := $.latestGroup|raw$("$.canonicalGroup$") | ||||
| 	g, err := $.latestGroup|raw$("$.groupName$") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
| @@ -34,7 +34,7 @@ import ( | ||||
|  | ||||
| var ( | ||||
| 	test                   = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata") | ||||
| 	inputVersions          = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/\"") | ||||
| 	inputVersions          = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/", "rbac/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/,rbac/\"") | ||||
| 	includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.") | ||||
| 	basePath               = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"") | ||||
| 	clientsetName          = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.") | ||||
|   | ||||
							
								
								
									
										18
									
								
								cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/doc.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/doc.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| /* | ||||
| Copyright 2015 The Kubernetes Authors All rights reserved. | ||||
|  | ||||
| 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. | ||||
| */ | ||||
|  | ||||
| // +groupName=testgroup.k8s.io | ||||
| package testgroup | ||||
| @@ -31,7 +31,7 @@ type FakeTestTypes struct { | ||||
| 	ns   string | ||||
| } | ||||
|  | ||||
| var testtypesResource = unversioned.GroupVersionResource{Group: "testgroup", Version: "", Resource: "testtypes"} | ||||
| var testtypesResource = unversioned.GroupVersionResource{Group: "testgroup.k8s.io", Version: "", Resource: "testtypes"} | ||||
|  | ||||
| func (c *FakeTestTypes) Create(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) { | ||||
| 	obj, err := c.Fake. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Eric Chiang
					Eric Chiang