summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2016-11-08 18:42:37 -0200
committerFelipe Artur <felipefac@gmail.com>2016-11-08 18:42:37 -0200
commita06f30d04826b5b9b13b327c0b3ac9d40018b52a (patch)
tree62a16d44afb15fafc31558d6cc8c33b53a689dc1
parent0108387053ac78bb2354511950fb5847a033e5d5 (diff)
downloadgitlab-ce-issue_1163_ee.tar.gz
-rw-r--r--app/models/project_services/issue_tracker_service.rb8
-rw-r--r--app/models/project_services/jira_service.rb8
-rw-r--r--lib/gitlab/closing_issue_extractor.rb21
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