Use the text of pull-request as the squash commit's message (#13071)

Originally, it was filled by the commit messages of the involved
commits. In this change, we use the headline comment of the pull
request as the commit message when it is a squash merge.

Thanks to @zeripath for suggesting the idea.

Fixes #12365

Co-authored-by: Mura Li <typeless@users.noreply.github.com>
This commit is contained in:
Mura Li 2020-12-22 00:46:14 +08:00 committed by GitHub
parent 34df4e5df5
commit 09304db9a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 22 deletions

View File

@ -440,7 +440,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
ctx.ServerError("IsUserAllowedToUpdate", err) ctx.ServerError("IsUserAllowedToUpdate", err)
return nil return nil
} }
ctx.Data["GetCommitMessages"] = pull_service.GetCommitMessages(pull) ctx.Data["GetCommitMessages"] = pull_service.GetSquashMergeCommitMessages(pull)
} }
sha, err := baseGitRepo.GetRefCommitID(pull.GetGitRefName()) sha, err := baseGitRepo.GetRefCommitID(pull.GetGitRefName())

View File

@ -502,8 +502,8 @@ func CloseRepoBranchesPulls(doer *models.User, repo *models.Repository) error {
return nil return nil
} }
// GetCommitMessages returns the commit messages between head and merge base (if there is one) // GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
func GetCommitMessages(pr *models.PullRequest) string { func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
if err := pr.LoadIssue(); err != nil { if err := pr.LoadIssue(); err != nil {
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err) log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
return "" return ""
@ -550,34 +550,22 @@ func GetCommitMessages(pr *models.PullRequest) string {
return "" return ""
} }
maxSize := setting.Repository.PullRequest.DefaultMergeMessageSize
posterSig := pr.Issue.Poster.NewGitSig().String() posterSig := pr.Issue.Poster.NewGitSig().String()
authorsMap := map[string]bool{} authorsMap := map[string]bool{}
authors := make([]string, 0, list.Len()) authors := make([]string, 0, list.Len())
stringBuilder := strings.Builder{} stringBuilder := strings.Builder{}
stringBuilder.WriteString(pr.Issue.Content)
if stringBuilder.Len() > 0 {
stringBuilder.WriteRune('\n')
stringBuilder.WriteRune('\n')
}
// commits list is in reverse chronological order // commits list is in reverse chronological order
element := list.Back() element := list.Back()
for element != nil { for element != nil {
commit := element.Value.(*git.Commit) commit := element.Value.(*git.Commit)
if maxSize < 0 || stringBuilder.Len() < maxSize {
toWrite := []byte(commit.CommitMessage)
if len(toWrite) > maxSize-stringBuilder.Len() && maxSize > -1 {
toWrite = append(toWrite[:maxSize-stringBuilder.Len()], "..."...)
}
if _, err := stringBuilder.Write(toWrite); err != nil {
log.Error("Unable to write commit message Error: %v", err)
return ""
}
if _, err := stringBuilder.WriteRune('\n'); err != nil {
log.Error("Unable to write commit message Error: %v", err)
return ""
}
}
authorString := commit.Author.String() authorString := commit.Author.String()
if !authorsMap[authorString] && authorString != posterSig { if !authorsMap[authorString] && authorString != posterSig {
authors = append(authors, authorString) authors = append(authors, authorString)