support setting the author of a commit

update copy
This commit is contained in:
Jesse Duffield 2022-05-08 21:05:01 +10:00
parent 901ab3ac1b
commit 9591cc381a
31 changed files with 141 additions and 14 deletions

View file

@ -28,6 +28,12 @@ func (self *CommitCommands) ResetAuthor() error {
return self.cmd.New("git commit --allow-empty --only --no-edit --amend --reset-author").Run()
}
// Sets the commit's author to the supplied value. Value is expected to be of the form 'Name <Email>'
func (self *CommitCommands) SetAuthor(value string) error {
commandStr := fmt.Sprintf("git commit --allow-empty --only --no-edit --amend --author=%s", self.cmd.Quote(value))
return self.cmd.New(commandStr).Run()
}
// ResetToCommit reset to commit
func (self *CommitCommands) ResetToCommit(sha string, strength string, envVars []string) error {
return self.cmd.New(fmt.Sprintf("git reset --%s %s", strength, sha)).

View file

@ -63,9 +63,21 @@ func (self *RebaseCommands) RewordCommitInEditor(commits []*models.Commit, index
}
func (self *RebaseCommands) ResetCommitAuthor(commits []*models.Commit, index int) error {
return self.GenericAmend(commits, index, func() error {
return self.commit.ResetAuthor()
})
}
func (self *RebaseCommands) SetCommitAuthor(commits []*models.Commit, index int, value string) error {
return self.GenericAmend(commits, index, func() error {
return self.commit.SetAuthor(value)
})
}
func (self *RebaseCommands) GenericAmend(commits []*models.Commit, index int, f func() error) error {
if index == 0 {
// we've selected the top commit so no rebase is required
return self.commit.ResetAuthor()
return f()
}
err := self.BeginInteractiveRebaseForCommit(commits, index)
@ -73,8 +85,8 @@ func (self *RebaseCommands) ResetCommitAuthor(commits []*models.Commit, index in
return err
}
// now the selected commit should be our head so we'll amend it with the new author
err = self.commit.ResetAuthor()
// now the selected commit should be our head so we'll amend it
err = f()
if err != nil {
return err
}