// NewContext generates a context from the given builder, naming systems, and // the naming system you wish to construct the canonical ordering from. func NewContext(b *parser.Builder, nameSystems namer.NameSystems, canonicalOrderName string) (*Context, error) { universe, err := b.FindTypes() if err != nil { return nil, err } c := &Context{ Namers: namer.NameSystems{}, Universe: universe, Inputs: b.FindPackages(), FileTypes: map[string]FileType{ GolangFileType: NewGolangFile(), }, builder: b, } for name, systemNamer := range nameSystems { c.Namers[name] = systemNamer if name == canonicalOrderName { orderer := namer.Orderer{Namer: systemNamer} c.Order = orderer.OrderUniverse(universe) } } return c, nil }
// Packages makes the client package definition. func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { boilerplate, err := arguments.LoadGoBoilerplate() if err != nil { glog.Fatalf("Failed loading boilerplate: %v", err) } groupToTypes := map[string][]*types.Type{} for _, inputDir := range arguments.InputDirs { p := context.Universe.Package(inputDir) for _, t := range p.Types { if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" { continue } group := filepath.Base(t.Name.Package) // Special case for the legacy API. if group == "api" { group = "legacy" } if _, found := groupToTypes[group]; !found { groupToTypes[group] = []*types.Type{} } groupToTypes[group] = append(groupToTypes[group], t) } } var packageList []generator.Package orderer := namer.Orderer{namer.NewPrivateNamer(0)} for group, types := range groupToTypes { packageList = append(packageList, packageForGroup(group, "unversioned", orderer.OrderTypes(types), arguments.OutputPackagePath, boilerplate)) } return generator.Packages(packageList) }
// Packages makes the client package definition. func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { boilerplate, err := arguments.LoadGoBoilerplate() if err != nil { glog.Fatalf("Failed loading boilerplate: %v", err) } customArgs, ok := arguments.CustomArgs.(clientgenargs.Args) if !ok { glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args") } if len(customArgs.CmdArgs) != 0 { boilerplate = append(boilerplate, []byte(fmt.Sprintf("\n// This file is generated by client-gen with arguments: %s\n\n", customArgs.CmdArgs))...) } else { boilerplate = append(boilerplate, []byte(fmt.Sprintf("\n// This file is generated by client-gen with the default arguments.\n\n"))...) } gvToTypes := map[unversioned.GroupVersion][]*types.Type{} for gv, inputDir := range customArgs.GroupVersionToInputPath { p := context.Universe.Package(inputDir) for _, t := range p.Types { if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" { continue } if _, found := gvToTypes[gv]; !found { gvToTypes[gv] = []*types.Type{} } gvToTypes[gv] = append(gvToTypes[gv], t) } } var packageList []generator.Package typedClientBasePath := filepath.Join(customArgs.ClientsetOutputPath, customArgs.ClientsetName, "typed") packageList = append(packageList, packageForClientset(customArgs, typedClientBasePath, boilerplate)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForClientset(customArgs, typedClientBasePath, boilerplate)) } // If --clientset-only=true, we don't regenerate the individual typed clients. if customArgs.ClientsetOnly { return generator.Packages(packageList) } orderer := namer.Orderer{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)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, boilerplate)) } } return generator.Packages(packageList) }
// Packages makes the client package definition. func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { boilerplate, err := arguments.LoadGoBoilerplate() if err != nil { glog.Fatalf("Failed loading boilerplate: %v", err) } groupToTypes := map[string][]*types.Type{} for _, inputDir := range arguments.InputDirs { p := context.Universe.Package(inputDir) for _, t := range p.Types { if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" { continue } group := filepath.Base(t.Name.Package) // Special case for the core API. if group == "api" { group = "core" } if _, found := groupToTypes[group]; !found { groupToTypes[group] = []*types.Type{} } groupToTypes[group] = append(groupToTypes[group], t) } } customArgs, ok := arguments.CustomArgs.(ClientGenArgs) if !ok { glog.Fatalf("cannot convert arguments.CustomArgs to ClientGenArgs") } var packageList []generator.Package packageList = append(packageList, packageForClientset(customArgs, arguments.OutputPackagePath, boilerplate)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForClientset(arguments.OutputPackagePath, customArgs.GroupVersions, boilerplate)) } // If --clientset-only=true, we don't regenerate the individual typed clients. if customArgs.ClientsetOnly { return generator.Packages(packageList) } orderer := namer.Orderer{namer.NewPrivateNamer(0)} for group, types := range groupToTypes { packageList = append(packageList, packageForGroup(group, "unversioned", orderer.OrderTypes(types), arguments.OutputPackagePath, arguments.OutputBase, boilerplate)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForGroup(group, "unversioned", orderer.OrderTypes(types), arguments.OutputPackagePath, arguments.OutputBase, boilerplate)) } } return generator.Packages(packageList) }
func construct(t *testing.T, files map[string]string, testNamer namer.Namer) (*parser.Builder, types.Universe, []*types.Type) { b := parser.New() for name, src := range files { if err := b.AddFile(name, []byte(src)); err != nil { t.Fatal(err) } } u, err := b.FindTypes() if err != nil { t.Fatal(err) } orderer := namer.Orderer{testNamer} o := orderer.Order(u) return b, u, o }
// Packages makes the client package definition. func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { boilerplate, err := arguments.LoadGoBoilerplate() if err != nil { glog.Fatalf("Failed loading boilerplate: %v", err) } customArgs, ok := arguments.CustomArgs.(ClientGenArgs) if !ok { glog.Fatalf("cannot convert arguments.CustomArgs to ClientGenArgs") } gvToTypes := map[unversioned.GroupVersion][]*types.Type{} for gv, inputDir := range customArgs.GroupVersionToInputPath { p := context.Universe.Package(inputDir) for _, t := range p.Types { if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" { continue } if _, found := gvToTypes[gv]; !found { gvToTypes[gv] = []*types.Type{} } gvToTypes[gv] = append(gvToTypes[gv], t) } } var packageList []generator.Package packageList = append(packageList, packageForClientset(customArgs, arguments.OutputPackagePath, boilerplate)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForClientset(arguments.OutputPackagePath, customArgs.GroupVersions, boilerplate)) } // If --clientset-only=true, we don't regenerate the individual typed clients. if customArgs.ClientsetOnly { return generator.Packages(packageList) } orderer := namer.Orderer{namer.NewPrivateNamer(0)} for _, gv := range customArgs.GroupVersions { types := gvToTypes[gv] packageList = append(packageList, packageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), arguments.OutputPackagePath, arguments.OutputBase, boilerplate)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), arguments.OutputPackagePath, arguments.OutputBase, boilerplate)) } } return generator.Packages(packageList) }
// NewContext generates a context from the given builder, naming systems, and // the naming system you wish to construct the canonical ordering from. func NewContext(b *parser.Builder, nameSystems namer.NameSystems, canonicalOrderName string) (*Context, error) { u, err := b.FindTypes() if err != nil { return nil, err } c := &Context{ Namers: namer.NameSystems{}, Universe: u, } for name, systemNamer := range nameSystems { c.Namers[name] = systemNamer if name == canonicalOrderName { orderer := namer.Orderer{systemNamer} c.Order = orderer.Order(u) } } return c, nil }
// Packages makes the client package definition. func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { boilerplate, err := arguments.LoadGoBoilerplate() if err != nil { glog.Fatalf("Failed loading boilerplate: %v", err) } customArgs, ok := arguments.CustomArgs.(clientgenargs.Args) if !ok { glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args") } includedTypesOverrides := customArgs.IncludedTypesOverrides generatedBy := generatedBy(customArgs) gvToTypes := map[unversioned.GroupVersion][]*types.Type{} for gv, inputDir := range customArgs.GroupVersionToInputPath { p := context.Universe.Package(inputDir) for n, t := range p.Types { // filter out types which are not included in user specified overrides. typesOverride, ok := includedTypesOverrides[gv] if ok { found := false for _, typeStr := range typesOverride { if typeStr == n { found = true } } if !found { continue } } else { // User has not specified any override for this group version. // filter out types which dont have genclient=true. if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" { continue } } if _, found := gvToTypes[gv]; !found { gvToTypes[gv] = []*types.Type{} } gvToTypes[gv] = append(gvToTypes[gv], t) } } var packageList []generator.Package typedClientBasePath := filepath.Join(customArgs.ClientsetOutputPath, customArgs.ClientsetName, "typed") packageList = append(packageList, packageForClientset(customArgs, typedClientBasePath, boilerplate, generatedBy)) if customArgs.FakeClient { packageList = append(packageList, fake.PackageForClientset(customArgs, typedClientBasePath, boilerplate, generatedBy)) } // If --clientset-only=true, we don't regenerate the individual typed clients. if customArgs.ClientsetOnly { return generator.Packages(packageList) } orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} for _, gv := range customArgs.GroupVersions { types := gvToTypes[gv] 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, inputPath, boilerplate, generatedBy)) } } return generator.Packages(packageList) }