Make runtime opt in to deepcopy

This minimizes the number of functions generated.  It also breaks the chain of
symbol dependencies to pkg/conversion, so we can remove now-unreferenced
(previously unused but referenced) conversion deep-copies.
This commit is contained in:
Tim Hockin 2016-06-15 23:43:13 -07:00
parent dc10f10e48
commit 51394e862d
6 changed files with 6 additions and 396 deletions

View File

@ -1,185 +0,0 @@
// +build !ignore_autogenerated
/*
Copyright 2016 The Kubernetes Authors.
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.
*/
// This file was autogenerated by deepcopy-gen. Do not edit it manually!
package conversion
import (
forked_reflect "k8s.io/kubernetes/third_party/forked/reflect"
reflect "reflect"
)
func DeepCopy_conversion_Cloner(in Cloner, out *Cloner, c *Cloner) error {
if in.deepCopyFuncs != nil {
in, out := in.deepCopyFuncs, &out.deepCopyFuncs
*out = make(map[reflect.Type]reflect.Value)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.deepCopyFuncs = nil
}
if in.generatedDeepCopyFuncs != nil {
in, out := in.generatedDeepCopyFuncs, &out.generatedDeepCopyFuncs
*out = make(map[reflect.Type]reflect.Value)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.generatedDeepCopyFuncs = nil
}
return nil
}
func DeepCopy_conversion_ConversionFuncs(in ConversionFuncs, out *ConversionFuncs, c *Cloner) error {
if in.fns != nil {
in, out := in.fns, &out.fns
*out = make(map[typePair]reflect.Value)
for range in {
// FIXME: Copying unassignable keys unsupported typePair
}
} else {
out.fns = nil
}
return nil
}
func DeepCopy_conversion_Converter(in Converter, out *Converter, c *Cloner) error {
if err := DeepCopy_conversion_ConversionFuncs(in.conversionFuncs, &out.conversionFuncs, c); err != nil {
return err
}
if err := DeepCopy_conversion_ConversionFuncs(in.generatedConversionFuncs, &out.generatedConversionFuncs, c); err != nil {
return err
}
if in.genericConversions != nil {
in, out := in.genericConversions, &out.genericConversions
*out = make([]GenericConversionFunc, len(in))
for i := range in {
if newVal, err := c.DeepCopy(in[i]); err != nil {
return err
} else {
(*out)[i] = newVal.(GenericConversionFunc)
}
}
} else {
out.genericConversions = nil
}
if in.ignoredConversions != nil {
in, out := in.ignoredConversions, &out.ignoredConversions
*out = make(map[typePair]struct{})
for range in {
// FIXME: Copying unassignable keys unsupported typePair
}
} else {
out.ignoredConversions = nil
}
if in.structFieldDests != nil {
in, out := in.structFieldDests, &out.structFieldDests
*out = make(map[typeNamePair][]typeNamePair)
for range in {
// FIXME: Copying unassignable keys unsupported typeNamePair
}
} else {
out.structFieldDests = nil
}
if in.structFieldSources != nil {
in, out := in.structFieldSources, &out.structFieldSources
*out = make(map[typeNamePair][]typeNamePair)
for range in {
// FIXME: Copying unassignable keys unsupported typeNamePair
}
} else {
out.structFieldSources = nil
}
if in.defaultingFuncs != nil {
in, out := in.defaultingFuncs, &out.defaultingFuncs
*out = make(map[reflect.Type]reflect.Value)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.defaultingFuncs = nil
}
if in.defaultingInterfaces != nil {
in, out := in.defaultingInterfaces, &out.defaultingInterfaces
*out = make(map[reflect.Type]interface{})
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.defaultingInterfaces = nil
}
if in.inputFieldMappingFuncs != nil {
in, out := in.inputFieldMappingFuncs, &out.inputFieldMappingFuncs
*out = make(map[reflect.Type]FieldMappingFunc)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.inputFieldMappingFuncs = nil
}
if in.inputDefaultFlags != nil {
in, out := in.inputDefaultFlags, &out.inputDefaultFlags
*out = make(map[reflect.Type]FieldMatchingFlags)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.inputDefaultFlags = nil
}
if in.Debug == nil {
out.Debug = nil
} else if newVal, err := c.DeepCopy(in.Debug); err != nil {
return err
} else {
out.Debug = newVal.(DebugLogger)
}
if in.nameFunc == nil {
out.nameFunc = nil
} else if newVal, err := c.DeepCopy(in.nameFunc); err != nil {
return err
} else {
out.nameFunc = newVal.(func(reflect.Type) string)
}
return nil
}
func DeepCopy_conversion_Equalities(in Equalities, out *Equalities, c *Cloner) error {
if in.Equalities != nil {
in, out := in.Equalities, &out.Equalities
*out = make(forked_reflect.Equalities)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.Equalities = nil
}
return nil
}
func DeepCopy_conversion_Meta(in Meta, out *Meta, c *Cloner) error {
if in.KeyNameMapping == nil {
out.KeyNameMapping = nil
} else if newVal, err := c.DeepCopy(in.KeyNameMapping); err != nil {
return err
} else {
out.KeyNameMapping = newVal.(FieldMappingFunc)
}
return nil
}

View File

@ -14,8 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
// +k8s:deepcopy-gen=package
// Package conversion provides go object versioning. // Package conversion provides go object versioning.
// //
// Specifically, conversion provides a way for you to define multiple versions // Specifically, conversion provides a way for you to define multiple versions

View File

@ -21,39 +21,9 @@ limitations under the License.
package runtime package runtime
import ( import (
unversioned "k8s.io/kubernetes/pkg/api/unversioned"
conversion "k8s.io/kubernetes/pkg/conversion" conversion "k8s.io/kubernetes/pkg/conversion"
reflect "reflect"
) )
func DeepCopy_runtime_NoopDecoder(in NoopDecoder, out *NoopDecoder, c *conversion.Cloner) error {
if in.Encoder == nil {
out.Encoder = nil
} else if newVal, err := c.DeepCopy(in.Encoder); err != nil {
return err
} else {
out.Encoder = newVal.(Encoder)
}
return nil
}
func DeepCopy_runtime_NoopEncoder(in NoopEncoder, out *NoopEncoder, c *conversion.Cloner) error {
if in.Decoder == nil {
out.Decoder = nil
} else if newVal, err := c.DeepCopy(in.Decoder); err != nil {
return err
} else {
out.Decoder = newVal.(Decoder)
}
return nil
}
func DeepCopy_runtime_Pair(in Pair, out *Pair, c *conversion.Cloner) error {
out.Name = in.Name
out.Doc = in.Doc
return nil
}
func DeepCopy_runtime_RawExtension(in RawExtension, out *RawExtension, c *conversion.Cloner) error { func DeepCopy_runtime_RawExtension(in RawExtension, out *RawExtension, c *conversion.Cloner) error {
if in.Raw != nil { if in.Raw != nil {
in, out := in.Raw, &out.Raw in, out := in.Raw, &out.Raw
@ -72,115 +42,6 @@ func DeepCopy_runtime_RawExtension(in RawExtension, out *RawExtension, c *conver
return nil return nil
} }
func DeepCopy_runtime_Scheme(in Scheme, out *Scheme, c *conversion.Cloner) error {
if in.gvkToType != nil {
in, out := in.gvkToType, &out.gvkToType
*out = make(map[unversioned.GroupVersionKind]reflect.Type)
for key, val := range in {
if newVal, err := c.DeepCopy(val); err != nil {
return err
} else {
(*out)[key] = newVal.(reflect.Type)
}
}
} else {
out.gvkToType = nil
}
if in.typeToGVK != nil {
in, out := in.typeToGVK, &out.typeToGVK
*out = make(map[reflect.Type][]unversioned.GroupVersionKind)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.typeToGVK = nil
}
if in.unversionedTypes != nil {
in, out := in.unversionedTypes, &out.unversionedTypes
*out = make(map[reflect.Type]unversioned.GroupVersionKind)
for range in {
// FIXME: Copying unassignable keys unsupported reflect.Type
}
} else {
out.unversionedTypes = nil
}
if in.unversionedKinds != nil {
in, out := in.unversionedKinds, &out.unversionedKinds
*out = make(map[string]reflect.Type)
for key, val := range in {
if newVal, err := c.DeepCopy(val); err != nil {
return err
} else {
(*out)[key] = newVal.(reflect.Type)
}
}
} else {
out.unversionedKinds = nil
}
if in.fieldLabelConversionFuncs != nil {
in, out := in.fieldLabelConversionFuncs, &out.fieldLabelConversionFuncs
*out = make(map[string]map[string]FieldLabelConversionFunc)
for key, val := range in {
if newVal, err := c.DeepCopy(val); err != nil {
return err
} else {
(*out)[key] = newVal.(map[string]FieldLabelConversionFunc)
}
}
} else {
out.fieldLabelConversionFuncs = nil
}
if in.converter != nil {
in, out := in.converter, &out.converter
*out = new(conversion.Converter)
if err := conversion.DeepCopy_conversion_Converter(*in, *out, c); err != nil {
return err
}
} else {
out.converter = nil
}
if in.cloner != nil {
in, out := in.cloner, &out.cloner
*out = new(conversion.Cloner)
if err := conversion.DeepCopy_conversion_Cloner(*in, *out, c); err != nil {
return err
}
} else {
out.cloner = nil
}
return nil
}
func DeepCopy_runtime_SerializerInfo(in SerializerInfo, out *SerializerInfo, c *conversion.Cloner) error {
if in.Serializer == nil {
out.Serializer = nil
} else if newVal, err := c.DeepCopy(in.Serializer); err != nil {
return err
} else {
out.Serializer = newVal.(Serializer)
}
out.EncodesAsText = in.EncodesAsText
out.MediaType = in.MediaType
return nil
}
func DeepCopy_runtime_StreamSerializerInfo(in StreamSerializerInfo, out *StreamSerializerInfo, c *conversion.Cloner) error {
if err := DeepCopy_runtime_SerializerInfo(in.SerializerInfo, &out.SerializerInfo, c); err != nil {
return err
}
if in.Framer == nil {
out.Framer = nil
} else if newVal, err := c.DeepCopy(in.Framer); err != nil {
return err
} else {
out.Framer = newVal.(Framer)
}
if err := DeepCopy_runtime_SerializerInfo(in.Embedded, &out.Embedded, c); err != nil {
return err
}
return nil
}
func DeepCopy_runtime_TypeMeta(in TypeMeta, out *TypeMeta, c *conversion.Cloner) error { func DeepCopy_runtime_TypeMeta(in TypeMeta, out *TypeMeta, c *conversion.Cloner) error {
out.APIVersion = in.APIVersion out.APIVersion = in.APIVersion
out.Kind = in.Kind out.Kind = in.Kind
@ -200,71 +61,3 @@ func DeepCopy_runtime_Unknown(in Unknown, out *Unknown, c *conversion.Cloner) er
out.ContentType = in.ContentType out.ContentType = in.ContentType
return nil return nil
} }
func DeepCopy_runtime_Unstructured(in Unstructured, out *Unstructured, c *conversion.Cloner) error {
if in.Object != nil {
in, out := in.Object, &out.Object
*out = make(map[string]interface{})
for key, val := range in {
if newVal, err := c.DeepCopy(val); err != nil {
return err
} else {
(*out)[key] = newVal.(interface{})
}
}
} else {
out.Object = nil
}
return nil
}
func DeepCopy_runtime_UnstructuredList(in UnstructuredList, out *UnstructuredList, c *conversion.Cloner) error {
if in.Object != nil {
in, out := in.Object, &out.Object
*out = make(map[string]interface{})
for key, val := range in {
if newVal, err := c.DeepCopy(val); err != nil {
return err
} else {
(*out)[key] = newVal.(interface{})
}
}
} else {
out.Object = nil
}
if in.Items != nil {
in, out := in.Items, &out.Items
*out = make([]*Unstructured, len(in))
for i := range in {
if newVal, err := c.DeepCopy(in[i]); err != nil {
return err
} else {
(*out)[i] = newVal.(*Unstructured)
}
}
} else {
out.Items = nil
}
return nil
}
func DeepCopy_runtime_UnstructuredObjectConverter(in UnstructuredObjectConverter, out *UnstructuredObjectConverter, c *conversion.Cloner) error {
return nil
}
func DeepCopy_runtime_VersionedObjects(in VersionedObjects, out *VersionedObjects, c *conversion.Cloner) error {
if in.Objects != nil {
in, out := in.Objects, &out.Objects
*out = make([]Object, len(in))
for i := range in {
if newVal, err := c.DeepCopy(in[i]); err != nil {
return err
} else {
(*out)[i] = newVal.(Object)
}
}
} else {
out.Objects = nil
}
return nil
}

View File

@ -42,6 +42,4 @@ limitations under the License.
// As a bonus, a few common types useful from all api objects and versions // As a bonus, a few common types useful from all api objects and versions
// are provided in types.go. // are provided in types.go.
// +k8s:deepcopy-gen=package
package runtime package runtime

View File

@ -69,6 +69,7 @@ option go_package = "runtime";
// in the Object. (TODO: In the case where the object is of an unknown type, a // in the Object. (TODO: In the case where the object is of an unknown type, a
// runtime.Unknown object will be created and stored.) // runtime.Unknown object will be created and stored.)
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
message RawExtension { message RawExtension {
// Raw is the underlying serialization of this object. // Raw is the underlying serialization of this object.
@ -88,6 +89,7 @@ message RawExtension {
// TypeMeta is provided here for convenience. You may use it directly from this package or define // TypeMeta is provided here for convenience. You may use it directly from this package or define
// your own with the same fields. // your own with the same fields.
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
message TypeMeta { message TypeMeta {
optional string apiVersion = 1; optional string apiVersion = 1;
@ -101,6 +103,7 @@ message TypeMeta {
// TODO: Make this object have easy access to field based accessors and settors for // TODO: Make this object have easy access to field based accessors and settors for
// metadata and field mutatation. // metadata and field mutatation.
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
message Unknown { message Unknown {
optional TypeMeta typeMeta = 1; optional TypeMeta typeMeta = 1;

View File

@ -40,6 +40,7 @@ import (
// TypeMeta is provided here for convenience. You may use it directly from this package or define // TypeMeta is provided here for convenience. You may use it directly from this package or define
// your own with the same fields. // your own with the same fields.
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
type TypeMeta struct { type TypeMeta struct {
APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty" protobuf:"bytes,1,opt,name=apiVersion"` APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty" protobuf:"bytes,1,opt,name=apiVersion"`
@ -92,6 +93,7 @@ const (
// in the Object. (TODO: In the case where the object is of an unknown type, a // in the Object. (TODO: In the case where the object is of an unknown type, a
// runtime.Unknown object will be created and stored.) // runtime.Unknown object will be created and stored.)
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
type RawExtension struct { type RawExtension struct {
// Raw is the underlying serialization of this object. // Raw is the underlying serialization of this object.
@ -109,6 +111,7 @@ type RawExtension struct {
// TODO: Make this object have easy access to field based accessors and settors for // TODO: Make this object have easy access to field based accessors and settors for
// metadata and field mutatation. // metadata and field mutatation.
// //
// +k8s:deepcopy-gen=true
// +protobuf=true // +protobuf=true
type Unknown struct { type Unknown struct {
TypeMeta `json:",inline" protobuf:"bytes,1,opt,name=typeMeta"` TypeMeta `json:",inline" protobuf:"bytes,1,opt,name=typeMeta"`