Generate conversions/deep-copies for experimental. Currently we make (and register) duplicate functions but this is benign.

This commit is contained in:
Muhammed Uluyol
2015-08-07 11:26:44 -07:00
parent 4d5899955e
commit 567bb15432
17 changed files with 661 additions and 127 deletions

View File

@@ -22,9 +22,12 @@ import (
"os"
"path"
"runtime"
"strings"
"k8s.io/kubernetes/pkg/api"
_ "k8s.io/kubernetes/pkg/api/v1"
_ "k8s.io/kubernetes/pkg/expapi"
_ "k8s.io/kubernetes/pkg/expapi/v1"
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util"
@@ -32,9 +35,11 @@ import (
flag "github.com/spf13/pflag"
)
const pkgBase = "k8s.io/kubernetes/pkg"
var (
functionDest = flag.StringP("funcDest", "f", "-", "Output for conversion functions; '-' means stdout")
version = flag.StringP("version", "v", "v1", "Version for conversion.")
groupVersion = flag.StringP("version", "v", "api/v1", "groupPath/version for conversion.")
)
func main() {
@@ -53,13 +58,20 @@ func main() {
funcOut = file
}
generator := pkg_runtime.NewConversionGenerator(api.Scheme.Raw(), path.Join("k8s.io/kubernetes/pkg/api", *version))
apiShort := generator.AddImport("k8s.io/kubernetes/pkg/api")
generator.AddImport("k8s.io/kubernetes/pkg/api/resource")
group, version := path.Split(*groupVersion)
group = strings.TrimRight(group, "/")
versionPath := path.Join(pkgBase, group, version)
generator := pkg_runtime.NewConversionGenerator(api.Scheme.Raw(), versionPath)
apiShort := generator.AddImport(path.Join(pkgBase, "api"))
generator.AddImport(path.Join(pkgBase, "api/resource"))
// TODO(wojtek-t): Change the overwrites to a flag.
generator.OverwritePackage(*version, "")
for _, knownType := range api.Scheme.KnownTypes(*version) {
if err := generator.GenerateConversionsForType(*version, knownType); err != nil {
generator.OverwritePackage(version, "")
for _, knownType := range api.Scheme.KnownTypes(version) {
if !strings.HasPrefix(knownType.PkgPath(), versionPath) {
continue
}
if err := generator.GenerateConversionsForType(version, knownType); err != nil {
glog.Errorf("error while generating conversion functions for %v: %v", knownType, err)
}
}

View File

@@ -25,6 +25,8 @@ import (
"k8s.io/kubernetes/pkg/api"
_ "k8s.io/kubernetes/pkg/api/v1"
_ "k8s.io/kubernetes/pkg/expapi"
_ "k8s.io/kubernetes/pkg/expapi/v1"
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util"
@@ -32,9 +34,11 @@ import (
flag "github.com/spf13/pflag"
)
const pkgBase = "k8s.io/kubernetes/pkg"
var (
functionDest = flag.StringP("func-dest", "f", "-", "Output for deep copy functions; '-' means stdout")
version = flag.StringP("version", "v", "v1", "Version for deep copies.")
functionDest = flag.StringP("funcDest", "f", "-", "Output for deep copy functions; '-' means stdout")
groupVersion = flag.StringP("version", "v", "", "groupPath/version for deep copies.")
overwrites = flag.StringP("overwrites", "o", "", "Comma-separated overwrites for package names")
)
@@ -54,15 +58,15 @@ func main() {
funcOut = file
}
knownVersion := *version
group, version := path.Split(*groupVersion)
group = strings.TrimRight(group, "/")
registerTo := "api.Scheme"
if knownVersion == "api" {
knownVersion = api.Scheme.Raw().InternalVersion
if *groupVersion == "api/" {
registerTo = "Scheme"
}
pkgPath := path.Join("k8s.io/kubernetes/pkg/api", knownVersion)
generator := pkg_runtime.NewDeepCopyGenerator(api.Scheme.Raw(), pkgPath, util.NewStringSet("k8s.io/kubernetes"))
generator.AddImport("k8s.io/kubernetes/pkg/api")
versionPath := path.Join(pkgBase, group, version)
generator := pkg_runtime.NewDeepCopyGenerator(api.Scheme.Raw(), versionPath, util.NewStringSet("k8s.io/kubernetes"))
generator.AddImport(path.Join(pkgBase, "api"))
if len(*overwrites) > 0 {
for _, overwrite := range strings.Split(*overwrites, ",") {
@@ -73,7 +77,10 @@ func main() {
generator.OverwritePackage(vals[0], vals[1])
}
}
for _, knownType := range api.Scheme.KnownTypes(knownVersion) {
for _, knownType := range api.Scheme.KnownTypes(version) {
if !strings.HasPrefix(knownType.PkgPath(), versionPath) {
continue
}
if err := generator.AddType(knownType); err != nil {
glog.Errorf("error while generating deep copy functions for %v: %v", knownType, err)
}