73 lines
2.7 KiB
Go
73 lines
2.7 KiB
Go
|
// deepcopy-gen is a tool for auto-generating DeepCopy functions.
|
||
|
//
|
||
|
// Given a list of input directories, it will generate DeepCopy and DeepCopyInto
|
||
|
// methods that efficiently perform a full deep-copy of each type. If these
|
||
|
// already exist (are predefined by the developer), they are used instead of
|
||
|
// generating new ones.
|
||
|
//
|
||
|
// If interfaces are referenced in types, it is expected that corresponding
|
||
|
// DeepCopyInterfaceName methods exist, e.g. DeepCopyObject for runtime.Object.
|
||
|
// These can be predefined by the developer or generated through tags, see below.
|
||
|
// They must be added to the interfaces themselves manually, e.g.
|
||
|
// type Object interface {
|
||
|
// ...
|
||
|
// DeepCopyObject() Object
|
||
|
// }
|
||
|
//
|
||
|
// All generation is governed by comment tags in the source. Any package may
|
||
|
// request DeepCopy generation by including a comment in the file-comments of
|
||
|
// one file, of the form:
|
||
|
// // +bili:deepcopy-gen=package
|
||
|
//
|
||
|
// DeepCopy functions can be generated for individual types, rather than the
|
||
|
// entire package by specifying a comment on the type definion of the form:
|
||
|
// // +bili:deepcopy-gen=true
|
||
|
//
|
||
|
// When generating for a whole package, individual types may opt out of
|
||
|
// DeepCopy generation by specifying a comment on the type definition of the form:
|
||
|
// // +bili:deepcopy-gen=false
|
||
|
//
|
||
|
// Additional DeepCopyInterfaceName methods can be generated by sepcifying a
|
||
|
// comment on the type definition of the form:
|
||
|
// // +bili:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object,k8s.io/kubernetes/runtime.List
|
||
|
// This leads to the generation of DeepCopyObject and DeepCopyList with the given
|
||
|
// interfaces as return types. We say that the tagged type implements deepcopy for the
|
||
|
// interfaces.
|
||
|
//
|
||
|
// The deepcopy funcs for interfaces using "+bili:deepcopy-gen:interfaces" use the pointer
|
||
|
// of the type as receiver. For those special cases where the non-pointer object should
|
||
|
// implement the interface, this can be done with:
|
||
|
// // +bili:deepcopy-gen:nonpointer-interfaces=true
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
|
||
|
"go-common/app/tool/gengo/args"
|
||
|
"go-common/app/tool/gengo/cmd/deepcopy-gen/generators"
|
||
|
|
||
|
"github.com/golang/glog"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
arguments := args.Default()
|
||
|
|
||
|
// Override defaults.
|
||
|
arguments.OutputFileBaseName = "deepcopy_generated"
|
||
|
|
||
|
// Custom args.
|
||
|
customArgs := &generators.CustomArgs{}
|
||
|
flag.CommandLine.Var(&customArgs.BoundingDirs, "bounding-dirs", "Comma-separated list of import paths which bound the types for which deep-copies will be generated.")
|
||
|
arguments.CustomArgs = customArgs
|
||
|
|
||
|
// Run it.
|
||
|
if err := arguments.Execute(
|
||
|
generators.NameSystems(),
|
||
|
generators.DefaultNameSystem(),
|
||
|
generators.Packages,
|
||
|
); err != nil {
|
||
|
glog.Fatalf("Error: %v", err)
|
||
|
}
|
||
|
glog.V(2).Info("Completed successfully.")
|
||
|
}
|