func run()

in pkg/commands/patch/patch.go [54:92]


func run(ctx context.Context, o *options, brw cmdlib.BundleReaderWriter, rw files.FileReaderWriter, gopt *cmdlib.GlobalOptions) error {
	bw, err := brw.ReadBundleData(ctx, gopt)
	if err != nil {
		return fmt.Errorf("error reading contents: %v", err)
	}

	optData, err := cmdlib.MergeOptions(ctx, rw, o.optionsFiles)
	if err != nil {
		return err
	}

	fopts := &filter.Options{Annotations: cmdlib.ParseStringMap(o.patchAnnotations)}
	applier := patchtmpl.NewApplier(patchtmpl.DefaultPatcherScheme(), fopts, o.keepTemplates)

	switch bw.Kind() {
	case "Component":
		comp, err := applier.ApplyOptions(bw.Component(), optData)
		if err != nil {
			return err
		}
		bw = wrapper.FromComponent(comp)
	case "Bundle":
		bun := bw.Bundle()
		var comps []*bundle.Component
		for _, comp := range bun.Components {
			comp, err := applier.ApplyOptions(comp, optData)
			if err != nil {
				return err
			}
			comps = append(comps, comp)
		}
		bun.Components = comps
		bw = wrapper.FromBundle(bun)
	default:
		return fmt.Errorf("bundle kind %q not supported for patching", bw.Kind())
	}

	return brw.WriteBundleData(ctx, bw, gopt)
}