mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Allow including Reviewed-on/Reviewed-by lines for custom merge messages (#31211)
				
					
				
			This PR introduces the `ReviewedOn` and `ReviewedBy` variables for the default merge message templates (e.g., `.gitea/default_merge_message/MERGE_TEMPLATE.md`). This allows customizing the default merge messages while retaining these trailers. This also moves the associated logic out of `pull.tmpl` into the relevant Go function. This is a first contribution towards #11077. --- For illustration, this allows to recreate the "default default" merge message with the following template: ``` .gitea/default_merge_message/MERGE_TEMPLATE.md Merge pull request '${PullRequestTitle}' (${PullRequestReference}) from ${HeadBranch} into ${BaseBranch} ${ReviewedOn} ${ReviewedBy} ```
This commit is contained in:
		@@ -44,6 +44,8 @@ You can use the following variables enclosed in `${}` inside these templates whi
 | 
				
			|||||||
- PullRequestIndex: Pull request's index number
 | 
					- PullRequestIndex: Pull request's index number
 | 
				
			||||||
- PullRequestReference: Pull request's reference char with index number. i.e. #1, !2
 | 
					- PullRequestReference: Pull request's reference char with index number. i.e. #1, !2
 | 
				
			||||||
- ClosingIssues: return a string contains all issues which will be closed by this pull request i.e. `close #1, close #2`
 | 
					- ClosingIssues: return a string contains all issues which will be closed by this pull request i.e. `close #1, close #2`
 | 
				
			||||||
 | 
					- ReviewedOn: Which pull request this commit belongs to. For example `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
 | 
				
			||||||
 | 
					- ReviewedBy: Who approved the pull request before the merge. For example `Reviewed-by: Jane Doe <jane.doe@example.com>`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Rebase
 | 
					## Rebase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,9 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
 | 
				
			|||||||
	if err := pr.Issue.LoadPoster(ctx); err != nil {
 | 
						if err := pr.Issue.LoadPoster(ctx); err != nil {
 | 
				
			||||||
		return "", "", err
 | 
							return "", "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if err := pr.Issue.LoadRepo(ctx); err != nil {
 | 
				
			||||||
 | 
							return "", "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	isExternalTracker := pr.BaseRepo.UnitEnabled(ctx, unit.TypeExternalTracker)
 | 
						isExternalTracker := pr.BaseRepo.UnitEnabled(ctx, unit.TypeExternalTracker)
 | 
				
			||||||
	issueReference := "#"
 | 
						issueReference := "#"
 | 
				
			||||||
@@ -53,6 +56,9 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
 | 
				
			|||||||
		issueReference = "!"
 | 
							issueReference = "!"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						reviewedOn := fmt.Sprintf("Reviewed-on: %s/%s", setting.AppURL, pr.Issue.Link())
 | 
				
			||||||
 | 
						reviewedBy := pr.GetApprovers(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if mergeStyle != "" {
 | 
						if mergeStyle != "" {
 | 
				
			||||||
		templateFilepath := fmt.Sprintf(".gitea/default_merge_message/%s_TEMPLATE.md", strings.ToUpper(string(mergeStyle)))
 | 
							templateFilepath := fmt.Sprintf(".gitea/default_merge_message/%s_TEMPLATE.md", strings.ToUpper(string(mergeStyle)))
 | 
				
			||||||
		commit, err := baseGitRepo.GetBranchCommit(pr.BaseRepo.DefaultBranch)
 | 
							commit, err := baseGitRepo.GetBranchCommit(pr.BaseRepo.DefaultBranch)
 | 
				
			||||||
@@ -77,6 +83,8 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
 | 
				
			|||||||
				"PullRequestPosterName":  pr.Issue.Poster.Name,
 | 
									"PullRequestPosterName":  pr.Issue.Poster.Name,
 | 
				
			||||||
				"PullRequestIndex":       strconv.FormatInt(pr.Index, 10),
 | 
									"PullRequestIndex":       strconv.FormatInt(pr.Index, 10),
 | 
				
			||||||
				"PullRequestReference":   fmt.Sprintf("%s%d", issueReference, pr.Index),
 | 
									"PullRequestReference":   fmt.Sprintf("%s%d", issueReference, pr.Index),
 | 
				
			||||||
 | 
									"ReviewedOn":             reviewedOn,
 | 
				
			||||||
 | 
									"ReviewedBy":             reviewedBy,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if pr.HeadRepo != nil {
 | 
								if pr.HeadRepo != nil {
 | 
				
			||||||
				vars["HeadRepoOwnerName"] = pr.HeadRepo.OwnerName
 | 
									vars["HeadRepoOwnerName"] = pr.HeadRepo.OwnerName
 | 
				
			||||||
@@ -116,20 +124,22 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
 | 
				
			|||||||
		return "", "", nil
 | 
							return "", "", nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						body = fmt.Sprintf("%s\n%s", reviewedOn, reviewedBy)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Squash merge has a different from other styles.
 | 
						// Squash merge has a different from other styles.
 | 
				
			||||||
	if mergeStyle == repo_model.MergeStyleSquash {
 | 
						if mergeStyle == repo_model.MergeStyleSquash {
 | 
				
			||||||
		return fmt.Sprintf("%s (%s%d)", pr.Issue.Title, issueReference, pr.Issue.Index), "", nil
 | 
							return fmt.Sprintf("%s (%s%d)", pr.Issue.Title, issueReference, pr.Issue.Index), body, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if pr.BaseRepoID == pr.HeadRepoID {
 | 
						if pr.BaseRepoID == pr.HeadRepoID {
 | 
				
			||||||
		return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch), "", nil
 | 
							return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch), body, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if pr.HeadRepo == nil {
 | 
						if pr.HeadRepo == nil {
 | 
				
			||||||
		return fmt.Sprintf("Merge pull request '%s' (%s%d) from <deleted>:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch), "", nil
 | 
							return fmt.Sprintf("Merge pull request '%s' (%s%d) from <deleted>:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch), body, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseBranch), "", nil
 | 
						return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseBranch), body, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func expandDefaultMergeMessage(template string, vars map[string]string) (message, body string) {
 | 
					func expandDefaultMergeMessage(template string, vars map[string]string) (message, body string) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -199,7 +199,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				{{if .AllowMerge}} {{/* user is allowed to merge */}}
 | 
									{{if .AllowMerge}} {{/* user is allowed to merge */}}
 | 
				
			||||||
					{{$prUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypePullRequests}}
 | 
										{{$prUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypePullRequests}}
 | 
				
			||||||
					{{$approvers := (.Issue.PullRequest.GetApprovers ctx)}}
 | 
					 | 
				
			||||||
					{{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash $prUnit.PullRequestsConfig.AllowFastForwardOnly}}
 | 
										{{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash $prUnit.PullRequestsConfig.AllowFastForwardOnly}}
 | 
				
			||||||
						{{$hasPendingPullRequestMergeTip := ""}}
 | 
											{{$hasPendingPullRequestMergeTip := ""}}
 | 
				
			||||||
						{{if .HasPendingPullRequestMerge}}
 | 
											{{if .HasPendingPullRequestMerge}}
 | 
				
			||||||
@@ -208,11 +207,10 @@
 | 
				
			|||||||
						{{end}}
 | 
											{{end}}
 | 
				
			||||||
						<div class="divider"></div>
 | 
											<div class="divider"></div>
 | 
				
			||||||
						<script type="module">
 | 
											<script type="module">
 | 
				
			||||||
							const issueUrl = window.location.origin + {{$.Issue.Link}};
 | 
					 | 
				
			||||||
							const defaultMergeTitle = {{.DefaultMergeMessage}};
 | 
												const defaultMergeTitle = {{.DefaultMergeMessage}};
 | 
				
			||||||
							const defaultSquashMergeTitle = {{.DefaultSquashMergeMessage}};
 | 
												const defaultSquashMergeTitle = {{.DefaultSquashMergeMessage}};
 | 
				
			||||||
							const defaultMergeMessage = {{if .DefaultMergeBody}}{{.DefaultMergeBody}}{{else}}`Reviewed-on: ${issueUrl}\n` + {{$approvers}}{{end}};
 | 
												const defaultMergeMessage = {{.DefaultMergeBody}};
 | 
				
			||||||
							const defaultSquashMergeMessage = {{if .DefaultSquashMergeBody}}{{.DefaultSquashMergeBody}}{{else}}`Reviewed-on: ${issueUrl}\n` + {{$approvers}}{{end}};
 | 
												const defaultSquashMergeMessage = {{.DefaultSquashMergeBody}};
 | 
				
			||||||
							const mergeForm = {
 | 
												const mergeForm = {
 | 
				
			||||||
								'baseLink': {{.Link}},
 | 
													'baseLink': {{.Link}},
 | 
				
			||||||
								'textCancel': {{ctx.Locale.Tr "cancel"}},
 | 
													'textCancel': {{ctx.Locale.Tr "cancel"}},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user