diff options
author | Felipe Artur <felipefac@gmail.com> | 2016-11-08 18:42:37 -0200 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2016-11-08 18:42:37 -0200 |
commit | a06f30d04826b5b9b13b327c0b3ac9d40018b52a (patch) | |
tree | 62a16d44afb15fafc31558d6cc8c33b53a689dc1 | |
parent | 0108387053ac78bb2354511950fb5847a033e5d5 (diff) | |
download | gitlab-ce-issue_1163_ee.tar.gz |
-rw-r--r-- | app/models/project_services/issue_tracker_service.rb | 8 | ||||
-rw-r--r-- | app/models/project_services/jira_service.rb | 8 | ||||
-rw-r--r-- | lib/gitlab/closing_issue_extractor.rb | 21 |
3 files changed, 30 insertions, 7 deletions
diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb index 207bb816ad1..5e6ec775a9c 100644 --- a/app/models/project_services/issue_tracker_service.rb +++ b/app/models/project_services/issue_tracker_service.rb @@ -7,6 +7,14 @@ class IssueTrackerService < Service @reference_pattern ||= %r{(\b[A-Z][A-Z0-9_]+-|#{Issue.reference_prefix})(?<issue>\d+)} end + # Pattern used to detect preceedings words to an issue refeence which + # should close a issue. + # Override this method on services that uses different patterns + def closing_pattern + @pattern ||= Gitlab.config.gitlab.issue_closing_pattern. + sub('%{issue_ref}', "(?:(?:#{link_pattern})|(?:#{Issue.reference_pattern}))") + end + def default? default end diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index 2dbe0075465..ea027116047 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -35,6 +35,14 @@ class JiraService < IssueTrackerService @reference_pattern ||= %r{(?<issue>\b([A-Z][A-Z0-9_]+-)\d+)} end + def closing_pattern + @closing_pattern ||= begin + + rescue Errno::ECONNREFUSED, JIRA::HTTPError => e + Rails.logger.info "#{self.class.name} ERROR: #{e.message}. API URL: #{url}." + end + end + def initialize_properties super do self.properties = { diff --git a/lib/gitlab/closing_issue_extractor.rb b/lib/gitlab/closing_issue_extractor.rb index 58f86abc5c4..ec39a76a961 100644 --- a/lib/gitlab/closing_issue_extractor.rb +++ b/lib/gitlab/closing_issue_extractor.rb @@ -1,14 +1,15 @@ module Gitlab class ClosingIssueExtractor - ISSUE_CLOSING_REGEX = begin - link_pattern = URI.regexp(%w(http https)) + # ISSUE_CLOSING_REGEX = begin + # link_pattern = URI.regexp(%w(http https)) - pattern = Gitlab.config.gitlab.issue_closing_pattern - pattern = pattern.sub('%{issue_ref}', "(?:(?:#{link_pattern})|(?:#{Issue.reference_pattern}))") - Regexp.new(pattern).freeze - end + # pattern = Gitlab.config.gitlab.issue_closing_pattern + # pattern = pattern.sub('%{issue_ref}', "(?:(?:#{link_pattern})|(?:#{Issue.reference_pattern}))") + # Regexp.new(pattern).freeze + # end def initialize(project, current_user = nil) + @project = project @extractor = Gitlab::ReferenceExtractor.new(project, current_user) end @@ -16,7 +17,7 @@ module Gitlab return [] if message.nil? closing_statements = [] - message.scan(ISSUE_CLOSING_REGEX) do + message.scan(closing_pattern) do closing_statements << Regexp.last_match[0] end @@ -26,5 +27,11 @@ module Gitlab @extractor.project.forked_from?(issue.project) # Don't extract issues on original project end end + + private + + def closing_pattern + @project.issues_tracker.closing_pattern + end end end |