]> source.dussan.org Git - gitea.git/commitdiff
Reintroduce squash merge default comment as a config setting (#16134)
authorparnic <github@parnic.com>
Fri, 18 Jun 2021 22:08:22 +0000 (17:08 -0500)
committerGitHub <noreply@github.com>
Fri, 18 Jun 2021 22:08:22 +0000 (00:08 +0200)
* Reinstate most of commit 09304db9a5d88c035a96f74a4544572bc8c5dac0

* Move the behaviour behind a config setting

* Also fix the initial #12365

docs/content/doc/advanced/config-cheat-sheet.en-us.md
modules/setting/repository.go
services/pull/pull.go

index cfe9f6cc9d44c6d3fccd86ee6a4f4cb9b149e2a3..4f84e2ac3326908894a6b1cbbbacfb3a17139d20 100644 (file)
@@ -94,10 +94,11 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
 - `REOPEN_KEYWORDS`: **reopen**, **reopens**, **reopened**: List of keywords used in Pull Request comments to automatically reopen
  a related issue
 - `DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT`: **50**: In the default merge message for squash commits include at most this many commits. Set to `-1` to include all commits
-- `DEFAULT_MERGE_MESSAGE_SIZE`: **5120**: In the default merge message for squash commits limit the size of the commit messages. Set to `-1` to have no limit.
+- `DEFAULT_MERGE_MESSAGE_SIZE`: **5120**: In the default merge message for squash commits limit the size of the commit messages. Set to `-1` to have no limit. Only used if `POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES` is `true`.
 - `DEFAULT_MERGE_MESSAGE_ALL_AUTHORS`: **false**: In the default merge message for squash commits walk all commits to include all authors in the Co-authored-by otherwise just use those in the limited list
 - `DEFAULT_MERGE_MESSAGE_MAX_APPROVERS`: **10**: In default merge messages limit the number of approvers listed as `Reviewed-by:`. Set to `-1` to include all.
 - `DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY`: **true**: In default merge messages only include approvers who are officially allowed to review.
+- `POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES`: **false**: In default squash-merge messages include the commit message of all commits comprising the pull request.
 
 ### Repository - Issue (`repository.issue`)
 
index a6fc73651a305b97491717a16b155192f5bf7040..a7666895e1f36d066bcacb85b6095ccb6d4107a5 100644 (file)
@@ -78,6 +78,7 @@ var (
                        DefaultMergeMessageAllAuthors            bool
                        DefaultMergeMessageMaxApprovers          int
                        DefaultMergeMessageOfficialApproversOnly bool
+                       PopulateSquashCommentWithCommitMessages  bool
                } `ini:"repository.pull-request"`
 
                // Issue Setting
@@ -199,6 +200,7 @@ var (
                        DefaultMergeMessageAllAuthors            bool
                        DefaultMergeMessageMaxApprovers          int
                        DefaultMergeMessageOfficialApproversOnly bool
+                       PopulateSquashCommentWithCommitMessages  bool
                }{
                        WorkInProgressPrefixes: []string{"WIP:", "[WIP]"},
                        // Same as GitHub. See
@@ -210,6 +212,7 @@ var (
                        DefaultMergeMessageAllAuthors:            false,
                        DefaultMergeMessageMaxApprovers:          10,
                        DefaultMergeMessageOfficialApproversOnly: true,
+                       PopulateSquashCommentWithCommitMessages:  false,
                },
 
                // Issue settings
index cc560fb199d2ab9aa2c86e032b32ea253e4a2eb4..02c0a7fe7c878658ea9ea9d7b3a8f20a4cb6d550 100644 (file)
@@ -570,16 +570,44 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
        authors := make([]string, 0, list.Len())
        stringBuilder := strings.Builder{}
 
-       stringBuilder.WriteString(pr.Issue.Content)
-       if stringBuilder.Len() > 0 {
-               stringBuilder.WriteRune('\n')
-               stringBuilder.WriteRune('\n')
+       if !setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
+               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 setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
+                       maxSize := setting.Repository.PullRequest.DefaultMergeMessageSize
+                       if maxSize < 0 || stringBuilder.Len() < maxSize {
+                               var toWrite []byte
+                               if element == list.Back() {
+                                       toWrite = []byte(strings.TrimPrefix(commit.CommitMessage, pr.Issue.Title))
+                               } else {
+                                       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)