First use of new deep-copy generator.

This commit is contained in:
Wojciech Tyczynski
2015-11-16 10:56:20 +01:00
parent 13a853f371
commit baf97c9c5e
7 changed files with 2660 additions and 2397 deletions

View File

@@ -18,7 +18,6 @@ package generators
import (
"io"
"os"
"path/filepath"
"strings"
@@ -69,9 +68,7 @@ func Packages(_ *generator.Context, arguments *args.GeneratorArgs) generator.Pac
PackagePath: inputDir,
HeaderText: append(boilerplate, []byte(
`
// This file was autogenerated by the command:
// $ `+strings.Join(os.Args, " ")+`
// Do not edit it manually!
// This file was autogenerated by deepcopy-gen. Do not edit it manually!
`)...),
GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
@@ -157,7 +154,26 @@ func (g *genDeepCopy) copyableWithinPackage(t *types.Type) bool {
return false
}
// TODO: Consider generating functions for other kinds too.
return t.Kind == types.Struct
if t.Kind != types.Struct {
return false
}
// TODO: This should be removed once we start generating public DeepCopy
// functions per directory.
if t.Name.Package != g.targetPackage {
// We won't be able to access private fields.
// Thus, this type cannot have private fields.
for _, member := range t.Members {
if strings.ToLower(member.Name[:1]) == member.Name[:1] {
return false
}
// TODO: This is a temporary hack, to make avoid generating function
// for conversion.Equalities. We should get rid of it.
if member.Embedded {
return false
}
}
}
return true
}
func (g *genDeepCopy) isOtherPackage(pkg string) bool {
@@ -189,7 +205,11 @@ func (g *genDeepCopy) Imports(c *generator.Context) (imports []string) {
func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
sw := generator.NewSnippetWriter(w, c, "$", "$")
sw.Do("func init() {\n", nil)
sw.Do("if err := api.Scheme.AddGeneratedDeepCopyFuncs(\n", nil)
if g.targetPackage == apiPackagePath {
sw.Do("if err := Scheme.AddGeneratedDeepCopyFuncs(\n", nil)
} else {
sw.Do("if err := api.Scheme.AddGeneratedDeepCopyFuncs(\n", nil)
}
for _, t := range g.typesForInit {
sw.Do("deepCopy_$.|public$,\n", t)
}
@@ -203,6 +223,7 @@ func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error {
// GenerateType makes the body of a file implementing a set for type t.
func (g *genDeepCopy) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
glog.Errorf("--> %v", t)
sw := generator.NewSnippetWriter(w, c, "$", "$")
sw.Do("func deepCopy_$.|public$(in $.|raw$, out *$.|raw$, c *conversion.Cloner) error {\n", t)
g.generateFor(t, sw)

View File

@@ -31,6 +31,11 @@ import (
func main() {
arguments := args.Default()
// Override defaults. These are Kubernetes specific input locations.
arguments.InputDirs = []string{
"k8s.io/kubernetes/pkg/api",
}
if err := arguments.Execute(
generators.NameSystems(),
generators.DefaultNameSystem(),
@@ -38,4 +43,5 @@ func main() {
); err != nil {
glog.Fatalf("Error: %v", err)
}
glog.Info("Completed successfully.")
}