Skip to content

Commit 76d6184

Browse files
Display conflict-free merge messages for pull requests (#15773) (#15796)
Backport #15773 Repositories using external issue tracker tend to use numeric issues in commits. To prevent conflicts during issue reference parsing or inside commit hooks, this change respects these configuration and uses the ! character to refer to pull requests in merge commit messages. For repositories using squash merges, this was already handled. Signed-off-by: JustusBunsi <[email protected]> Co-authored-by: zeripath <[email protected]> Co-authored-by: Steven <[email protected]>
1 parent d644709 commit 76d6184

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

models/pull.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,21 @@ func (pr *PullRequest) GetDefaultMergeMessage() string {
212212
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
213213
return ""
214214
}
215+
if err := pr.LoadBaseRepo(); err != nil {
216+
log.Error("LoadBaseRepo: %v", err)
217+
return ""
218+
}
219+
220+
issueReference := "#"
221+
if pr.BaseRepo.UnitEnabled(UnitTypeExternalTracker) {
222+
issueReference = "!"
223+
}
215224

216225
if pr.BaseRepoID == pr.HeadRepoID {
217-
return fmt.Sprintf("Merge pull request '%s' (#%d) from %s into %s", pr.Issue.Title, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch)
226+
return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch)
218227
}
219228

220-
return fmt.Sprintf("Merge pull request '%s' (#%d) from %s:%s into %s", pr.Issue.Title, pr.Issue.Index, pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseBranch)
229+
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)
221230
}
222231

223232
// ReviewCount represents a count of Reviews

models/pull_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,36 @@ func TestPullRequest_GetWorkInProgressPrefixWorkInProgress(t *testing.T) {
234234
pr.Issue.Title = "[wip] " + original
235235
assert.Equal(t, "[wip]", pr.GetWorkInProgressPrefix())
236236
}
237+
238+
func TestPullRequest_GetDefaultMergeMessage_InternalTracker(t *testing.T) {
239+
assert.NoError(t, PrepareTestDatabase())
240+
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 2}).(*PullRequest)
241+
242+
assert.Equal(t, "Merge pull request 'issue3' (#3) from branch2 into master", pr.GetDefaultMergeMessage())
243+
244+
pr.BaseRepoID = 1
245+
pr.HeadRepoID = 2
246+
assert.Equal(t, "Merge pull request 'issue3' (#3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
247+
}
248+
249+
func TestPullRequest_GetDefaultMergeMessage_ExternalTracker(t *testing.T) {
250+
assert.NoError(t, PrepareTestDatabase())
251+
252+
externalTracker := RepoUnit{
253+
Type: UnitTypeExternalTracker,
254+
Config: &ExternalTrackerConfig{
255+
ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}",
256+
},
257+
}
258+
baseRepo := &Repository{Name: "testRepo", ID: 1}
259+
baseRepo.Owner = &User{Name: "testOwner"}
260+
baseRepo.Units = []*RepoUnit{&externalTracker}
261+
262+
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 2, BaseRepo: baseRepo}).(*PullRequest)
263+
264+
assert.Equal(t, "Merge pull request 'issue3' (!3) from branch2 into master", pr.GetDefaultMergeMessage())
265+
266+
pr.BaseRepoID = 1
267+
pr.HeadRepoID = 2
268+
assert.Equal(t, "Merge pull request 'issue3' (!3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
269+
}

0 commit comments

Comments
 (0)