@@ -562,31 +562,19 @@ func CloseRepoBranchesPulls(doer *user_model.User, repo *repo_model.Repository)
562
562
563
563
var commitMessageTrailersPattern = regexp .MustCompile (`(?:^|\n\n)(?:[\w-]+[ \t]*:[^\n]+\n*(?:[ \t]+[^\n]+\n*)*)+$` )
564
564
565
- // GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
566
- func GetSquashMergeCommitMessages (pr * models.PullRequest ) string {
567
- if err := pr .LoadIssue (); err != nil {
568
- log .Error ("Cannot load issue %d for PR id %d: Error: %v" , pr .IssueID , pr .ID , err )
569
- return ""
570
- }
571
-
572
- if err := pr .Issue .LoadPoster (); err != nil {
573
- log .Error ("Cannot load poster %d for pr id %d, index %d Error: %v" , pr .Issue .PosterID , pr .ID , pr .Index , err )
574
- return ""
575
- }
576
-
565
+ // CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last]
566
+ func CommitsBetweenLimit (ctx context.Context , pr * models.PullRequest , limit , skip int ) ([]* git.Commit , error ) {
577
567
if pr .HeadRepo == nil {
578
568
var err error
579
569
pr .HeadRepo , err = repo_model .GetRepositoryByID (pr .HeadRepoID )
580
570
if err != nil {
581
- log .Error ("GetRepositoryById[%d]: %v" , pr .HeadRepoID , err )
582
- return ""
571
+ return nil , fmt .Errorf ("GetRepositoryById[%d]: %v" , pr .HeadRepoID , err )
583
572
}
584
573
}
585
574
586
575
gitRepo , err := git .OpenRepository (pr .HeadRepo .RepoPath ())
587
576
if err != nil {
588
- log .Error ("Unable to open head repository: Error: %v" , err )
589
- return ""
577
+ return nil , fmt .Errorf ("Unable to open head repository: Error: %v" , err )
590
578
}
591
579
defer gitRepo .Close ()
592
580
@@ -596,27 +584,59 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
596
584
} else {
597
585
pr .HeadCommitID , err = gitRepo .GetRefCommitID (pr .GetGitRefName ())
598
586
if err != nil {
599
- log .Error ("Unable to get head commit: %s Error: %v" , pr .GetGitRefName (), err )
600
- return ""
587
+ return nil , fmt .Errorf ("Unable to get head commit: %s Error: %v" , pr .GetGitRefName (), err )
601
588
}
602
589
headCommit , err = gitRepo .GetCommit (pr .HeadCommitID )
603
590
}
604
591
if err != nil {
605
- log .Error ("Unable to get head commit: %s Error: %v" , pr .HeadBranch , err )
606
- return ""
592
+ return nil , fmt .Errorf ("Unable to get head commit: %s Error: %v" , pr .HeadBranch , err )
607
593
}
608
594
609
595
mergeBase , err := gitRepo .GetCommit (pr .MergeBase )
610
596
if err != nil {
611
- log .Error ("Unable to get merge base commit: %s Error: %v" , pr .MergeBase , err )
597
+ return nil , fmt .Errorf ("Unable to get merge base commit: %s Error: %v" , pr .MergeBase , err )
598
+ }
599
+
600
+ commits , err := gitRepo .CommitsBetweenLimit (headCommit , mergeBase , limit , skip )
601
+ if err != nil {
602
+ return nil , fmt .Errorf ("Unable to get commits between: %s %s Error: %v" , pr .HeadBranch , pr .MergeBase , err )
603
+ }
604
+ return commits , nil
605
+ }
606
+
607
+ // GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
608
+ func GetSquashMergeCommitMessages (pr * models.PullRequest ) string {
609
+ if err := pr .LoadIssue (); err != nil {
610
+ log .Error ("Cannot load issue %d for PR id %d: Error: %v" , pr .IssueID , pr .ID , err )
611
+ return ""
612
+ }
613
+
614
+ if err := pr .Issue .LoadPoster (); err != nil {
615
+ log .Error ("Cannot load poster %d for pr id %d, index %d Error: %v" , pr .Issue .PosterID , pr .ID , pr .Index , err )
616
+ return ""
617
+ }
618
+
619
+ if pr .HeadRepo == nil {
620
+ var err error
621
+ pr .HeadRepo , err = repo_model .GetRepositoryByID (pr .HeadRepoID )
622
+ if err != nil {
623
+ log .Error ("GetRepositoryById[%d]: %v" , pr .HeadRepoID , err )
624
+ return ""
625
+ }
626
+ }
627
+
628
+ gitRepo , err := git .OpenRepository (pr .HeadRepo .RepoPath ())
629
+ if err != nil {
630
+ log .Error ("Unable to open head repository: Error: %v" , err )
612
631
return ""
613
632
}
633
+ defer gitRepo .Close ()
614
634
615
635
limit := setting .Repository .PullRequest .DefaultMergeMessageCommitsLimit
616
636
617
- commits , err := gitRepo . CommitsBetweenLimit (headCommit , mergeBase , limit , 0 )
637
+ commits , err := CommitsBetweenLimit (context . TODO (), pr , limit , 0 )
618
638
if err != nil {
619
- log .Error ("Unable to get commits between : %s %s Error: %v" , pr . HeadBranch , pr . MergeBase , err )
639
+ log .Error ("CommitsBetweenLimit : %v" , err )
620
640
return ""
621
641
}
622
642
0 commit comments