func applyPackagePatch()

in pkg/bundle/patch/executor.go [219:270]


func applyPackagePatch(pkg *bundlev1.Package, p *bundlev1.PatchPackage, values map[string]interface{}) error {
	// Check parameters
	if pkg == nil {
		return fmt.Errorf("cannot process nil package")
	}
	if p == nil {
		return fmt.Errorf("cannot process nil patch")
	}

	// Patch concerns path
	if p.Path != nil {
		newPath, err := applyPackagePathPatch(pkg.Name, p.Path, values)
		if err != nil {
			return fmt.Errorf("unable to process `%s` name operations: %w", pkg.Name, err)
		}

		// Update package name
		pkg.Name = newPath
	}

	// Patch concerns annotations
	if p.Annotations != nil {
		if pkg.Annotations == nil {
			pkg.Annotations = map[string]string{}
		}
		if err := applyMapOperations(pkg.Annotations, p.Annotations, values); err != nil {
			return fmt.Errorf("unable to process `%s` annotations: %w", pkg.Name, err)
		}
	}

	// Patch concerns labels
	if p.Labels != nil {
		if pkg.Labels == nil {
			pkg.Labels = map[string]string{}
		}
		if err := applyMapOperations(pkg.Labels, p.Labels, values); err != nil {
			return fmt.Errorf("unable to process `%s` labels: %w", pkg.Name, err)
		}
	}

	// Patch concerns data
	if p.Data != nil {
		if pkg.Secrets == nil {
			pkg.Secrets = &bundlev1.SecretChain{}
		}
		if err := applySecretPatch(pkg.Secrets, p.Data, values); err != nil {
			return fmt.Errorf("unable to apply patch to secret data for package `%s`: %w", pkg.Name, err)
		}
	}

	return nil
}