Commit e33ddfeb authored by Douwe Maan's avatar Douwe Maan

Refactor ClosingIssueExtractor.

parent b492f0f8
...@@ -118,7 +118,7 @@ class Commit ...@@ -118,7 +118,7 @@ class Commit
# Discover issues should be closed when this commit is pushed to a project's # Discover issues should be closed when this commit is pushed to a project's
# default branch. # default branch.
def closes_issues(project, current_user = self.committer) def closes_issues(project, current_user = self.committer)
Gitlab::ClosingIssueExtractor.closed_by_message_in_project(safe_message, project, current_user) Gitlab::ClosingIssueExtractor.new(project, current_user).closed_by_message(safe_message)
end end
# Mentionable override. # Mentionable override.
......
...@@ -260,8 +260,8 @@ class MergeRequest < ActiveRecord::Base ...@@ -260,8 +260,8 @@ class MergeRequest < ActiveRecord::Base
def closes_issues(current_user = self.author) def closes_issues(current_user = self.author)
if target_branch == project.default_branch if target_branch == project.default_branch
issues = commits.flat_map { |c| c.closes_issues(project, current_user) } issues = commits.flat_map { |c| c.closes_issues(project, current_user) }
issues.push(*Gitlab::ClosingIssueExtractor. issues.push(*Gitlab::ClosingIssueExtractor.new(project, current_user).
closed_by_message_in_project(description, project, current_user)) closed_by_message(description))
issues.uniq.sort_by(&:id) issues.uniq.sort_by(&:id)
else else
[] []
......
module Gitlab module Gitlab
module ClosingIssueExtractor class ClosingIssueExtractor
ISSUE_CLOSING_REGEX = Regexp.new(Gitlab.config.gitlab.issue_closing_pattern) ISSUE_CLOSING_REGEX = Regexp.new(Gitlab.config.gitlab.issue_closing_pattern)
def self.closed_by_message_in_project(message, project, current_user = nil) def initialize(project, current_user = nil)
issues = [] @extractor = Gitlab::ReferenceExtractor.new(project, current_user)
end
unless message.nil? def closed_by_message(message)
md = message.scan(ISSUE_CLOSING_REGEX) return [] if message.nil?
md.each do |ref| closing_statements = message.scan(ISSUE_CLOSING_REGEX).
extractor = Gitlab::ReferenceExtractor.new(project, current_user) map { |ref| ref[0] }.join(" ")
extractor.analyze(ref[0])
issues += extractor.issues @extractor.analyze(closing_statements)
end
end
issues.uniq @extractor.issues
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment