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

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 

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
routers/repo
services/pull

@ -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())

@ -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)