func()

in controllers/merge_request/controller.go [285:334]


func (r *Reconcile) commitFiles(ctx context.Context, instance *gerritApi.GerritMergeRequest, gitClient GitClient, changeID string) error {
	var cMap corev1.ConfigMap
	if err := r.k8sClient.Get(ctx, types.NamespacedName{
		Namespace: instance.Namespace,
		Name:      instance.Spec.ChangesConfigMap,
	}, &cMap); err != nil {
		return errors.Wrap(err, "unable to get files config map")
	}

	if err := gitClient.CheckoutBranch(instance.Spec.ProjectName, instance.TargetBranch()); err != nil {
		return errors.Wrap(err, "unable to checkout branch")
	}

	addFiles := make([]string, 0, len(cMap.Data))

	for _, mrContents := range cMap.Data {
		var mrFile MRConfigMapFile
		if err := json.Unmarshal([]byte(mrContents), &mrFile); err != nil {
			return errors.Wrap(err, "unable to decode file")
		}

		fileChanged := true

		if mrFile.Contents != nil {
			if err := gitClient.SetFileContents(instance.Spec.ProjectName, mrFile.Path, *mrFile.Contents); err != nil {
				return errors.Wrap(err, "unable to set file contents")
			}
		} else {
			var err error

			fileChanged, err = gitClient.RemoveFile(instance.Spec.ProjectName, mrFile.Path)
			if err != nil {
				return errors.Wrap(err, "unable to remove file")
			}
		}

		if fileChanged {
			addFiles = append(addFiles, mrFile.Path)
		}
	}

	gitUser := &git.User{Name: instance.Spec.AuthorName, Email: instance.Spec.AuthorEmail}
	message := commitMessage(instance.CommitMessage(), changeID)

	if err := gitClient.Commit(instance.Spec.ProjectName, message, addFiles, gitUser); err != nil {
		return errors.Wrap(err, "unable to commit changes")
	}

	return nil
}