MCPcopy
hub / github.com/kubernetes/kubectl / visitToPatch

Method visitToPatch

pkg/cmd/util/editor/editoptions.go:620–729  ·  view source on GitHub ↗
(originalInfos []*resource.Info, patchVisitor resource.Visitor, results *editResults)

Source from the content-addressed store, hash-verified

618}
619
620func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor resource.Visitor, results *editResults) error {
621 err := patchVisitor.Visit(func(info *resource.Info, incomingErr error) error {
622 editObjUID, err := meta.NewAccessor().UID(info.Object)
623 if err != nil {
624 return err
625 }
626
627 var originalInfo *resource.Info
628 for _, i := range originalInfos {
629 originalObjUID, err := meta.NewAccessor().UID(i.Object)
630 if err != nil {
631 return err
632 }
633 if editObjUID == originalObjUID {
634 originalInfo = i
635 break
636 }
637 }
638 if originalInfo == nil {
639 return fmt.Errorf("no original object found for %#v", info.Object)
640 }
641
642 originalJS, err := encodeToJSON(originalInfo.Object.(runtime.Unstructured))
643 if err != nil {
644 return err
645 }
646
647 editedJS, err := encodeToJSON(info.Object.(runtime.Unstructured))
648 if err != nil {
649 return err
650 }
651
652 if reflect.DeepEqual(originalJS, editedJS) {
653 // no edit, so just skip it.
654 printer, err := o.ToPrinter("skipped")
655 if err != nil {
656 return err
657 }
658 return printer.PrintObj(info.Object, o.Out)
659 }
660
661 preconditions := []mergepatch.PreconditionFunc{
662 mergepatch.RequireKeyUnchanged("apiVersion"),
663 mergepatch.RequireKeyUnchanged("kind"),
664 mergepatch.RequireMetadataKeyUnchanged("name"),
665 mergepatch.RequireKeyUnchanged("managedFields"),
666 }
667
668 // Create the versioned struct from the type defined in the mapping
669 // (which is the API version we'll be submitting the patch to)
670 versionedObject, err := scheme.Scheme.New(info.Mapping.GroupVersionKind)
671 var patchType types.PatchType
672 var patch []byte
673 switch {
674 case runtime.IsNotRegisteredError(err):
675 // fall back to generic JSON merge patch
676 patchType = types.MergePatchType
677 patch, err = jsonpatch.CreateMergePatch(originalJS, editedJS)

Callers 2

RunMethod · 0.95

Calls 6

encodeToJSONFunction · 0.85
addErrorMethod · 0.80
PatchMethod · 0.65
VisitMethod · 0.45
ToPrinterMethod · 0.45
PrintObjMethod · 0.45

Tested by 1