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