Skip to content

Commit f6c9dec

Browse files
committed
Merge message template support for rebase without merge commit
Use `default_merge_message/REBASE_TEMPLATE.md` for amending the message of the last commit in the list of commits that was merged. Previously this template was mentioned in the documentation but not actually used. In this template additional variables `CommitTitle` and `CommitBody` are available, for the title and body of the commit. Ideally the message of every commit would be updated using the template, but doing an interactive rebase or merging commits one by one is complicated, so that is left as a future improvement.
1 parent 83d1a17 commit f6c9dec

File tree

2 files changed

+13
-19
lines changed

2 files changed

+13
-19
lines changed

services/pull/merge.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ import (
3434
issue_service "code.gitea.io/gitea/services/issue"
3535
)
3636

37-
// Compose message used when merging pull request.
38-
func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issues_model.PullRequest, mergeStyle repo_model.MergeStyle, commitTitle, commitBody string) (message, body string, err error) {
37+
// getMergeMessage composes the message used when merging a pull request.
38+
func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issues_model.PullRequest, mergeStyle repo_model.MergeStyle, extraVars map[string]string) (message, body string, err error) {
3939
if err := pr.LoadBaseRepo(ctx); err != nil {
4040
return "", "", err
4141
}
@@ -62,8 +62,6 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
6262
if err != nil {
6363
if !git.IsErrNotExist(err) {
6464
return "", "", err
65-
} else if mergeStyle == repo_model.MergeStyleRebase {
66-
return "", "", nil
6765
}
6866
} else {
6967
vars := map[string]string{
@@ -79,14 +77,13 @@ func getMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issue
7977
"PullRequestIndex": strconv.FormatInt(pr.Index, 10),
8078
"PullRequestReference": fmt.Sprintf("%s%d", issueReference, pr.Index),
8179
}
82-
if mergeStyle == repo_model.MergeStyleRebase {
83-
vars["CommitTitle"] = commitTitle
84-
vars["CommitBody"] = commitBody
85-
}
8680
if pr.HeadRepo != nil {
8781
vars["HeadRepoOwnerName"] = pr.HeadRepo.OwnerName
8882
vars["HeadRepoName"] = pr.HeadRepo.Name
8983
}
84+
for extraKey, extraValue := range extraVars {
85+
vars[extraKey] = extraValue
86+
}
9087
refs, err := pr.ResolveCrossReferences(ctx)
9188
if err == nil {
9289
closeIssueIndexes := make([]string, 0, len(refs))
@@ -141,7 +138,7 @@ func expandDefaultMergeMessage(template string, vars map[string]string) (message
141138

142139
// GetDefaultMergeMessage returns default message used when merging pull request
143140
func GetDefaultMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr *issues_model.PullRequest, mergeStyle repo_model.MergeStyle) (message, body string, err error) {
144-
return getMergeMessage(ctx, baseGitRepo, pr, mergeStyle, "", "")
141+
return getMergeMessage(ctx, baseGitRepo, pr, mergeStyle, nil)
145142
}
146143

147144
// Merge merges pull request to base repository.

services/pull/merge_rebase.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,18 @@ import (
1212
"code.gitea.io/gitea/modules/log"
1313
)
1414

15-
// Compose message to amend commit in rebase merge of pull request.
15+
// getRebaseAmendMessage composes the message to amend commits in rebase merge of a pull request.
1616
func getRebaseAmendMessage(ctx *mergeContext, baseGitRepo *git.Repository) (message string, err error) {
1717
// Get existing commit message.
18-
var commitMessage strings.Builder
19-
cmd := git.NewCommand(ctx, "show", "--format=%B", "-s")
20-
if err := cmd.Run(&git.RunOpts{Dir: ctx.tmpBasePath, Stdout: &commitMessage}); err != nil {
18+
commitMessage, _, err := git.NewCommand(ctx, "show", "--format=%B", "-s").RunStdString(&git.RunOpts{Dir: ctx.tmpBasePath})
19+
if err != nil {
2120
return "", err
2221
}
2322

24-
commitTitle, commitBody, _ := strings.Cut(commitMessage.String(), "\n")
25-
commitTitle = strings.TrimSpace(commitTitle)
26-
commitBody = strings.TrimSpace(commitBody)
23+
commitTitle, commitBody, _ := strings.Cut(commitMessage, "\n")
24+
extraVars := map[string]string{"CommitTitle": strings.TrimSpace(commitTitle), "CommitBody": strings.TrimSpace(commitBody)}
2725

28-
message, body, err := getMergeMessage(ctx, baseGitRepo, ctx.pr, repo_model.MergeStyleRebase, commitTitle, commitBody)
26+
message, body, err := getMergeMessage(ctx, baseGitRepo, ctx.pr, repo_model.MergeStyleRebase, extraVars)
2927
if err != nil || message == "" {
3028
return "", err
3129
}
@@ -74,8 +72,7 @@ func doMergeRebaseFastForward(ctx *mergeContext) error {
7472
}
7573

7674
if newMessage != "" {
77-
cmdAmend := git.NewCommand(ctx, "commit", "--amend").AddOptionFormat("--message=%s", newMessage)
78-
if err := cmdAmend.Run(&git.RunOpts{Dir: ctx.tmpBasePath}); err != nil {
75+
if err := git.NewCommand(ctx, "commit", "--amend").AddOptionFormat("--message=%s", newMessage).Run(&git.RunOpts{Dir: ctx.tmpBasePath}); err != nil {
7976
log.Error("Unable to amend commit message: %v", err)
8077
return err
8178
}

0 commit comments

Comments
 (0)