diff options
Diffstat (limited to 'models/pull.go')
-rw-r--r-- | models/pull.go | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/models/pull.go b/models/pull.go index 7faf1f1172..79f6d7005d 100644 --- a/models/pull.go +++ b/models/pull.go @@ -214,7 +214,7 @@ func (pr *PullRequest) APIFormat() *api.PullRequest { } if pr.Status != PullRequestStatusChecking { - mergeable := pr.Status != PullRequestStatusConflict + mergeable := pr.Status != PullRequestStatusConflict && !pr.IsWorkInProgress() apiPullRequest.Mergeable = mergeable } if pr.HasMerged { @@ -1247,6 +1247,37 @@ func (pr *PullRequest) checkAndUpdateStatus() { } } +// IsWorkInProgress determine if the Pull Request is a Work In Progress by its title +func (pr *PullRequest) IsWorkInProgress() bool { + if err := pr.LoadIssue(); err != nil { + log.Error(4, "LoadIssue: %v", err) + return false + } + + for _, prefix := range setting.Repository.PullRequest.WorkInProgressPrefixes { + if strings.HasPrefix(strings.ToUpper(pr.Issue.Title), prefix) { + return true + } + } + return false +} + +// GetWorkInProgressPrefix returns the prefix used to mark the pull request as a work in progress. +// It returns an empty string when none were found +func (pr *PullRequest) GetWorkInProgressPrefix() string { + if err := pr.LoadIssue(); err != nil { + log.Error(4, "LoadIssue: %v", err) + return "" + } + + for _, prefix := range setting.Repository.PullRequest.WorkInProgressPrefixes { + if strings.HasPrefix(strings.ToUpper(pr.Issue.Title), prefix) { + return pr.Issue.Title[0:len(prefix)] + } + } + return "" +} + // TestPullRequests checks and tests untested patches of pull requests. // TODO: test more pull requests at same time. func TestPullRequests() { |