code: func (o *DiffOptions) Run() error {
  	differ, err := NewDiffer("LIVE", "MERGED")
  	if err != nil {
  		return err
  	}
  	defer differ.TearDown()
  
  	printer := Printer{}
  
  	r := o.Builder.
  		Unstructured().
  		NamespaceParam(o.CmdNamespace).DefaultNamespace().
  		FilenameParam(o.EnforceNamespace, &o.FilenameOptions).
  		Flatten().
  		Do()
  	if err := r.Err(); err != nil {
  		return err
  	}
  
  	err = r.Visit(func(info *resource.Info, err error) error {
  		if err != nil {
  			return err
  		}
  
  		if err := o.DryRunVerifier.HasSupport(info.Mapping.GroupVersionKind); err != nil {
  			return err
  		}
  
  		local := info.Object.DeepCopyObject()
  		for i := 1; i <= maxRetries; i++ {
  			if err = info.Get(); err != nil {
  				if !errors.IsNotFound(err) {
  					return err
  				}
  				info.Object = nil
  			}
  
  			force := i == maxRetries
  			if force {
  				klog.Warningf(
  					"Object (%v: %v) keeps changing, diffing without lock",
  					info.Object.GetObjectKind().GroupVersionKind(),
  					info.Name,
  				)
  			}
  			obj := InfoObject{
  				LocalObj:        local,
  				Info:            info,
  				Encoder:         scheme.DefaultJSONEncoder(),
  				OpenAPI:         o.OpenAPISchema,
  				Force:           force,
  				ServerSideApply: o.ServerSideApply,
  				ForceConflicts:  o.ForceConflicts,
  			}
  
  			err = differ.Diff(obj, printer)
  			if !isConflict(err) {
  				break
  			}
  		}
  		return err
  	})
  	if err != nil {
  		return err
  	}
  
  	return differ.Run(o.Diff)
  }
docs: // RunDiff uses the factory to parse file arguments, find the version to
  // diff, and find each Info object for each files, and runs against the
  // differ.