Skip to content

Commit 71bbd06

Browse files
robert3005ajlake
authored andcommitted
Add option to ignore squashed commit messages (#45)
1 parent c80162a commit 71bbd06

2 files changed

Lines changed: 110 additions & 20 deletions

File tree

github/github.go

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ type Client struct {
8989
}
9090

9191
type BulldozerFile struct {
92-
MergeStrategy string `yaml:"strategy" validate:"nonzero"`
93-
DeleteAfterMerge bool `yaml:"deleteAfterMerge" validate:"nonzero"`
94-
Mode string `yaml:"mode" validate:"nonzero"`
95-
UpdateStrategy UpdateStrategy `yaml:"updateStrategy"`
92+
MergeStrategy string `yaml:"strategy" validate:"nonzero"`
93+
DeleteAfterMerge bool `yaml:"deleteAfterMerge" validate:"nonzero"`
94+
Mode string `yaml:"mode" validate:"nonzero"`
95+
UpdateStrategy UpdateStrategy `yaml:"updateStrategy"`
96+
IgnoreSquashedMessages bool `yaml:"ignoreSquashedMessages"`
9697
}
9798

9899
func FromToken(c echo.Context, token string, opts ...Option) *Client {
@@ -292,6 +293,15 @@ func (client *Client) DeleteFlag(branch *github.PullRequestBranch) (bool, error)
292293
return bulldozerFile.DeleteAfterMerge, nil
293294
}
294295

296+
func (client *Client) IgnoreSquashedMessages(branch *github.PullRequestBranch) (bool, error) {
297+
bulldozerFile, err := client.ConfigFile(branch.Repo, branch.GetRef())
298+
if err != nil {
299+
return false, err
300+
}
301+
302+
return bulldozerFile.IgnoreSquashedMessages, nil
303+
}
304+
295305
func (client *Client) OperationMode(branch *github.PullRequestBranch) (string, error) {
296306
cfgFile, err := client.ConfigFile(branch.Repo, branch.GetRef())
297307
if err != nil {
@@ -347,26 +357,26 @@ func (client *Client) CommitMessages(pr *github.PullRequest) ([]string, error) {
347357
return commitMessages, nil
348358
}
349359

350-
func (client *Client) Merge(pr *github.PullRequest) error {
351-
logger := client.Logger
352-
353-
repo := pr.Base.Repo
354-
owner := repo.Owner.GetLogin()
355-
name := repo.GetName()
356-
360+
func (client *Client) commitMessage(pr *github.PullRequest, mergeMethod string) (string, error) {
357361
commitMessage := ""
358-
mergeMethod, err := client.MergeMethod(pr.Base)
359-
if err != nil {
360-
return errors.Wrapf(err, "cannot get merge method for %s on ref %s", repo.GetFullName(), pr.Base.GetRef())
361-
}
362-
363362
if mergeMethod == SquashMethod {
364-
messages, err := client.CommitMessages(pr)
363+
repo := pr.Base.Repo
364+
ignoreSquashedMessages, err := client.IgnoreSquashedMessages(pr.Base)
365365
if err != nil {
366-
return err
366+
return "", errors.Wrapf(err,
367+
"cannot get ignore squash messages flag for %s on ref %s",
368+
repo.GetFullName(),
369+
pr.Base.GetRef())
367370
}
368-
for _, message := range messages {
369-
commitMessage = fmt.Sprintf("%s%s\n", commitMessage, message)
371+
372+
if !ignoreSquashedMessages {
373+
messages, err := client.CommitMessages(pr)
374+
if err != nil {
375+
return "", err
376+
}
377+
for _, message := range messages {
378+
commitMessage = fmt.Sprintf("%s%s\n", commitMessage, message)
379+
}
370380
}
371381

372382
var r *regexp.Regexp
@@ -383,6 +393,25 @@ func (client *Client) Merge(pr *github.PullRequest) error {
383393
}
384394
}
385395

396+
return commitMessage, nil
397+
}
398+
399+
func (client *Client) Merge(pr *github.PullRequest) error {
400+
logger := client.Logger
401+
402+
repo := pr.Base.Repo
403+
owner := repo.Owner.GetLogin()
404+
name := repo.GetName()
405+
406+
mergeMethod, err := client.MergeMethod(pr.Base)
407+
if err != nil {
408+
return errors.Wrapf(err, "cannot get merge method for %s on ref %s", repo.GetFullName(), pr.Base.GetRef())
409+
}
410+
commitMessage, err := client.commitMessage(pr, mergeMethod)
411+
if err != nil {
412+
return err
413+
}
414+
386415
delete, err := client.DeleteFlag(pr.Base)
387416
if err != nil {
388417
return errors.Wrapf(err, "cannot get delete flag for %s on ref %s", repo.GetFullName(), pr.Base.GetRef())

github/github_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,3 +710,64 @@ func TestCommitMessage(t *testing.T) {
710710
"* 1st commit msg", "* 2nd commit msg", "* 3rd commit msg",
711711
}, commitMessages)
712712
}
713+
714+
func TestSquashCommitMessage(t *testing.T) {
715+
setup()
716+
defer teardown()
717+
718+
mux.HandleFunc("/repos/o/r/pulls/1/commits", func(w http.ResponseWriter, r *http.Request) {
719+
testMethod(t, r, "GET")
720+
fmt.Fprint(w, `
721+
[
722+
{
723+
"commit": {
724+
"message": "1st commit msg"
725+
}
726+
},
727+
{
728+
"commit": {
729+
"message": "2nd commit msg"
730+
}
731+
},
732+
{
733+
"commit": {
734+
"message": "3rd commit msg"
735+
}
736+
}
737+
]
738+
`)
739+
})
740+
741+
mux.HandleFunc("/repos/o/r", func(w http.ResponseWriter, r *http.Request) {
742+
testMethod(t, r, "GET")
743+
fmt.Fprint(w, `{
744+
"allow_merge_commit": true,
745+
"allow_squash_merge": true,
746+
"allow_rebase_merge": true
747+
}`)
748+
})
749+
750+
mux.HandleFunc("/repos/o/r/contents/.bulldozer.yml", func(w http.ResponseWriter, r *http.Request) {
751+
testMethod(t, r, "GET")
752+
fmt.Fprint(w, `{
753+
"type": "file",
754+
"encoding": "base64",
755+
"content": "bW9kZTogd2hpdGVsaXN0CnN0cmF0ZWd5OiBzcXVhc2gKZGVsZXRlQWZ0ZXJNZXJnZTogdHJ1ZQppZ25vcmVTcXVhc2hlZE1lc3NhZ2VzOiB0cnVlCg==",
756+
"name": ".bulldozer.yml",
757+
"path": ".bulldozer.yml"
758+
}`)
759+
})
760+
761+
branch := &github.PullRequestBranch{
762+
Ref: github.String("develop"),
763+
Repo: fakeRepository("r"),
764+
}
765+
mergeMethod, err := client.MergeMethod(branch)
766+
require.Nil(t, err)
767+
assert.Equal(t, SquashMethod, mergeMethod)
768+
769+
pr := fakePullRequest(1)
770+
commitMessage, err := client.commitMessage(pr, mergeMethod)
771+
require.Nil(t, err)
772+
require.Equal(t, "", commitMessage)
773+
}

0 commit comments

Comments
 (0)