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.")
}

View File

@ -23,8 +23,9 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
kube::golang::setup_env
setgen=$(kube::util::find-binary "set-gen")
clientgen=$(kube::util::find-binary "client-gen")
deepcopygen=$(kube::util::find-binary "deepcopy-gen")
setgen=$(kube::util::find-binary "set-gen")
# Please do not add any logic to this shell script. Add logic to the go code
# that generates the set-gen program.
@ -33,6 +34,7 @@ clientgen=$(kube::util::find-binary "client-gen")
# update- and verify- scripts.
${clientgen} "$@"
${clientgen} -t "$@"
${deepcopygen} "$@"
${setgen} "$@"
# You may add additional calls of code generators like set-gen above.

View File

@ -50,13 +50,18 @@ function generate_deep_copies() {
# Ensure that the version being processed is registered by setting
# KUBE_API_VERSIONS.
if [ -z ${ver##*/} ]; then
apiVersions=""
apiVersions=""
else
apiVersions="${ver}"
fi
KUBE_API_VERSIONS="${apiVersions}" generate_version "${ver}"
done
}
# v1 is in the group ""
DEFAULT_VERSIONS="/ v1 extensions/ extensions/v1beta1 componentconfig/ componentconfig/v1alpha1 metrics/ metrics/v1alpha1"
# Currently pkg/api/deep_copy_generated.go is generated by the new go2idl generator.
# All others (mentioned above) are still generated by the old reflection-based generator.
# TODO: Migrate these to the new generator.
DEFAULT_VERSIONS="v1 extensions/ extensions/v1beta1 componentconfig/ componentconfig/v1alpha1 metrics/ metrics/v1alpha1"
VERSIONS=${VERSIONS:-$DEFAULT_VERSIONS}
generate_deep_copies "$VERSIONS"

View File

@ -26,6 +26,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
kube::golang::setup_env
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/client-gen
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/deepcopy-gen
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/set-gen
"${KUBE_ROOT}/hack/after-build/run-codegen.sh" "$@"

View File

@ -26,6 +26,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
kube::golang::setup_env
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/client-gen
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/deepcopy-gen
"${KUBE_ROOT}/hack/build-go.sh" cmd/libs/go2idl/set-gen
"${KUBE_ROOT}/hack/after-build/run-codegen.sh" --verify-only

File diff suppressed because it is too large Load Diff