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
}