@@ -89,10 +89,11 @@ type Client struct {
8989}
9090
9191type 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
9899func 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+
295305func (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 ())
0 commit comments