Skip to content

Commit

Permalink
Use the text of pull-request as the squash commit's message (#13071)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
typeless and typeless committed Dec 21, 2020
1 parent 34df4e5 commit 09304db
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 22 deletions.
2 changes: 1 addition & 1 deletion routers/repo/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
ctx.ServerError("IsUserAllowedToUpdate", err)
return nil
}
ctx.Data["GetCommitMessages"] = pull_service.GetCommitMessages(pull)
ctx.Data["GetCommitMessages"] = pull_service.GetSquashMergeCommitMessages(pull)
}

sha, err := baseGitRepo.GetRefCommitID(pull.GetGitRefName())
Expand Down
30 changes: 9 additions & 21 deletions services/pull/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -502,8 +502,8 @@ func CloseRepoBranchesPulls(doer *models.User, repo *models.Repository) error {
return nil
}

// GetCommitMessages returns the commit messages between head and merge base (if there is one)
func GetCommitMessages(pr *models.PullRequest) string {
// GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
if err := pr.LoadIssue(); err != nil {
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
return ""
Expand Down Expand Up @@ -550,34 +550,22 @@ func GetCommitMessages(pr *models.PullRequest) string {
return ""
}

maxSize := setting.Repository.PullRequest.DefaultMergeMessageSize

posterSig := pr.Issue.Poster.NewGitSig().String()

authorsMap := map[string]bool{}
authors := make([]string, 0, list.Len())
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
element := list.Back()
for element != nil {
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()
if !authorsMap[authorString] && authorString != posterSig {
authors = append(authors, authorString)
Expand Down

0 comments on commit 09304db

Please sign in to comment.