mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-12 12:55:47 +02:00
Extract functions AddCoAuthorToMessage and AddCoAuthorToDescription
In this commit we only need the former; the latter will be reused later in this branch.
This commit is contained in:
parent
287195b5b2
commit
b8f4cd0ef6
3 changed files with 89 additions and 2 deletions
|
@ -39,13 +39,13 @@ func (self *CommitCommands) SetAuthor(value string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a commit's coauthor using Github/Gitlab Co-authored-by metadata. Value is expected to be of the form 'Name <Email>'
|
// Add a commit's coauthor using Github/Gitlab Co-authored-by metadata. Value is expected to be of the form 'Name <Email>'
|
||||||
func (self *CommitCommands) AddCoAuthor(sha string, value string) error {
|
func (self *CommitCommands) AddCoAuthor(sha string, author string) error {
|
||||||
message, err := self.GetCommitMessage(sha)
|
message, err := self.GetCommitMessage(sha)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
message = message + fmt.Sprintf("\nCo-authored-by: %s", value)
|
message = AddCoAuthorToMessage(message, author)
|
||||||
|
|
||||||
cmdArgs := NewGitCmd("commit").
|
cmdArgs := NewGitCmd("commit").
|
||||||
Arg("--allow-empty", "--amend", "--only", "-m", message).
|
Arg("--allow-empty", "--amend", "--only", "-m", message).
|
||||||
|
@ -54,6 +54,25 @@ func (self *CommitCommands) AddCoAuthor(sha string, value string) error {
|
||||||
return self.cmd.New(cmdArgs).Run()
|
return self.cmd.New(cmdArgs).Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddCoAuthorToMessage(message string, author string) string {
|
||||||
|
subject, body, _ := strings.Cut(message, "\n")
|
||||||
|
|
||||||
|
return strings.TrimSpace(subject) + "\n\n" + AddCoAuthorToDescription(strings.TrimSpace(body), author)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddCoAuthorToDescription(description string, author string) string {
|
||||||
|
if description != "" {
|
||||||
|
lines := strings.Split(description, "\n")
|
||||||
|
if strings.HasPrefix(lines[len(lines)-1], "Co-authored-by:") {
|
||||||
|
description += "\n"
|
||||||
|
} else {
|
||||||
|
description += "\n\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return description + fmt.Sprintf("Co-authored-by: %s", author)
|
||||||
|
}
|
||||||
|
|
||||||
// ResetToCommit reset to commit
|
// ResetToCommit reset to commit
|
||||||
func (self *CommitCommands) ResetToCommit(sha string, strength string, envVars []string) error {
|
func (self *CommitCommands) ResetToCommit(sha string, strength string, envVars []string) error {
|
||||||
cmdArgs := NewGitCmd("reset").Arg("--"+strength, sha).ToArgv()
|
cmdArgs := NewGitCmd("reset").Arg("--"+strength, sha).ToArgv()
|
||||||
|
|
|
@ -333,3 +333,70 @@ func TestGetCommitMessageFromHistory(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAddCoAuthorToMessage(t *testing.T) {
|
||||||
|
scenarios := []struct {
|
||||||
|
name string
|
||||||
|
message string
|
||||||
|
expectedResult string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
// This never happens, I think it isn't possible to create a commit
|
||||||
|
// with an empty message. Just including it for completeness.
|
||||||
|
name: "Empty message",
|
||||||
|
message: "",
|
||||||
|
expectedResult: "\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Just a subject, no body",
|
||||||
|
message: "Subject",
|
||||||
|
expectedResult: "Subject\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Subject and body",
|
||||||
|
message: "Subject\n\nBody",
|
||||||
|
expectedResult: "Subject\n\nBody\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Body already ending with a Co-authored-by line",
|
||||||
|
message: "Subject\n\nBody\n\nCo-authored-by: Jane Smith <jane@smith.com>",
|
||||||
|
expectedResult: "Subject\n\nBody\n\nCo-authored-by: Jane Smith <jane@smith.com>\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, s := range scenarios {
|
||||||
|
t.Run(s.name, func(t *testing.T) {
|
||||||
|
result := AddCoAuthorToMessage(s.message, "John Doe <john@doe.com>")
|
||||||
|
assert.Equal(t, s.expectedResult, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddCoAuthorToDescription(t *testing.T) {
|
||||||
|
scenarios := []struct {
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
expectedResult string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Empty description",
|
||||||
|
description: "",
|
||||||
|
expectedResult: "Co-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Non-empty description",
|
||||||
|
description: "Body",
|
||||||
|
expectedResult: "Body\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Description already ending with a Co-authored-by line",
|
||||||
|
description: "Body\n\nCo-authored-by: Jane Smith <jane@smith.com>",
|
||||||
|
expectedResult: "Body\n\nCo-authored-by: Jane Smith <jane@smith.com>\nCo-authored-by: John Doe <john@doe.com>",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, s := range scenarios {
|
||||||
|
t.Run(s.name, func(t *testing.T) {
|
||||||
|
result := AddCoAuthorToDescription(s.description, "John Doe <john@doe.com>")
|
||||||
|
assert.Equal(t, s.expectedResult, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ var AddCoAuthor = NewIntegrationTest(NewIntegrationTestArgs{
|
||||||
|
|
||||||
t.Views().Main().ContainsLines(
|
t.Views().Main().ContainsLines(
|
||||||
Equals(" initial commit"),
|
Equals(" initial commit"),
|
||||||
|
Equals(" "),
|
||||||
Equals(" Co-authored-by: John Smith <jsmith@gmail.com>"),
|
Equals(" Co-authored-by: John Smith <jsmith@gmail.com>"),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue