You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.7 KiB
72 lines
2.7 KiB
// 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.") |
|
}
|
|
|