func()

in pkg/git/git.go [158:215]


func (*GitProvider) CommitChanges(directory, commitMsg string, ops ...CommitOps) error {
	logger := log.WithValues(logDirectoryKey, directory)
	logger.Info("Start committing changes")

	option := &commitOps{
		allowEmptyCommit: false,
	}

	for _, applyOption := range ops {
		applyOption(option)
	}

	r, err := git.PlainOpen(directory)
	if err != nil {
		return fmt.Errorf(errPlainOpenTmpl, directory, err)
	}

	w, err := r.Worktree()
	if err != nil {
		return fmt.Errorf("failed to get git worktree: %w", err)
	}

	_, err = w.Add(".")
	if err != nil {
		return fmt.Errorf("failed to add files to the index: %w", err)
	}

	if !option.allowEmptyCommit {
		var status git.Status

		status, err = w.Status()
		if err != nil {
			return fmt.Errorf("failed to get git status: %w", err)
		}

		if status.IsClean() {
			logger.Info("Nothing to commit. Skip committing")

			return nil
		}
	}

	_, err = w.Commit(commitMsg, &git.CommitOptions{
		Author: &object.Signature{
			Name:  "codebase",
			Email: "codebase@edp.local",
			When:  time.Now(),
		},
		AllowEmptyCommits: option.allowEmptyCommit,
	})
	if err != nil {
		return fmt.Errorf("failed to commit: %w", err)
	}

	logger.Info("Changes have been committed")

	return nil
}