Display conflict-free merge messages for pull requests (#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 <61625851+justusbunsi@users.noreply.github.com> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
parent
e22ee468cf
commit
864e656d81
2 changed files with 46 additions and 4 deletions
|
@ -212,12 +212,21 @@ func (pr *PullRequest) GetDefaultMergeMessage() string {
|
||||||
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
|
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
if err := pr.LoadBaseRepo(); err != nil {
|
||||||
if pr.BaseRepoID == pr.HeadRepoID {
|
log.Error("LoadBaseRepo: %v", err)
|
||||||
return fmt.Sprintf("Merge pull request '%s' (#%d) from %s into %s", pr.Issue.Title, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch)
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
issueReference := "#"
|
||||||
|
if pr.BaseRepo.UnitEnabled(UnitTypeExternalTracker) {
|
||||||
|
issueReference = "!"
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReviewCount represents a count of Reviews
|
// ReviewCount represents a count of Reviews
|
||||||
|
|
|
@ -234,3 +234,36 @@ func TestPullRequest_GetWorkInProgressPrefixWorkInProgress(t *testing.T) {
|
||||||
pr.Issue.Title = "[wip] " + original
|
pr.Issue.Title = "[wip] " + original
|
||||||
assert.Equal(t, "[wip]", pr.GetWorkInProgressPrefix())
|
assert.Equal(t, "[wip]", pr.GetWorkInProgressPrefix())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPullRequest_GetDefaultMergeMessage_InternalTracker(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareTestDatabase())
|
||||||
|
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 2}).(*PullRequest)
|
||||||
|
|
||||||
|
assert.Equal(t, "Merge pull request 'issue3' (#3) from branch2 into master", pr.GetDefaultMergeMessage())
|
||||||
|
|
||||||
|
pr.BaseRepoID = 1
|
||||||
|
pr.HeadRepoID = 2
|
||||||
|
assert.Equal(t, "Merge pull request 'issue3' (#3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPullRequest_GetDefaultMergeMessage_ExternalTracker(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareTestDatabase())
|
||||||
|
|
||||||
|
externalTracker := RepoUnit{
|
||||||
|
Type: UnitTypeExternalTracker,
|
||||||
|
Config: &ExternalTrackerConfig{
|
||||||
|
ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
baseRepo := &Repository{Name: "testRepo", ID: 1}
|
||||||
|
baseRepo.Owner = &User{Name: "testOwner"}
|
||||||
|
baseRepo.Units = []*RepoUnit{&externalTracker}
|
||||||
|
|
||||||
|
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 2, BaseRepo: baseRepo}).(*PullRequest)
|
||||||
|
|
||||||
|
assert.Equal(t, "Merge pull request 'issue3' (!3) from branch2 into master", pr.GetDefaultMergeMessage())
|
||||||
|
|
||||||
|
pr.BaseRepoID = 1
|
||||||
|
pr.HeadRepoID = 2
|
||||||
|
assert.Equal(t, "Merge pull request 'issue3' (!3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
|
||||||
|
}
|
||||||
|
|
Reference in a new issue