From a06f30d04826b5b9b13b327c0b3ac9d40018b52a Mon Sep 17 00:00:00 2001 From: Felipe Artur Date: Tue, 8 Nov 2016 18:42:37 -0200 Subject: WIP --- .../project_services/issue_tracker_service.rb | 8 ++++++++ app/models/project_services/jira_service.rb | 8 ++++++++ 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})(?\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{(?\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 -- cgit v1.2.3