Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/integrations/jira.rb')
-rw-r--r--app/models/integrations/jira.rb32
1 files changed, 29 insertions, 3 deletions
diff --git a/app/models/integrations/jira.rb b/app/models/integrations/jira.rb
index a1cdd55ceae..0f7e9b96370 100644
--- a/app/models/integrations/jira.rb
+++ b/app/models/integrations/jira.rb
@@ -23,6 +23,8 @@ module Integrations
validates :api_url, public_url: true, allow_blank: true
validates :username, presence: true, if: :activated?
validates :password, presence: true, if: :activated?
+ validates :jira_issue_prefix, untrusted_regexp: true, length: { maximum: 255 }, if: :activated?
+ validates :jira_issue_regex, untrusted_regexp: true, length: { maximum: 255 }, if: :activated?
validates :jira_issue_transition_id,
format: {
@@ -70,7 +72,20 @@ module Integrations
title: -> { s_('JiraService|Password or API token') },
non_empty_password_title: -> { s_('JiraService|Enter new password or API token') },
non_empty_password_help: -> { s_('JiraService|Leave blank to use your current password or API token.') },
- help: -> { s_('JiraService|Password for the server version or an API token for the cloud version') }
+ help: -> { s_('JiraService|Password for the server version or an API token for the cloud version') },
+ is_secret: true
+
+ field :jira_issue_regex,
+ section: SECTION_TYPE_CONFIGURATION,
+ required: false,
+ title: -> { s_('JiraService|Jira issue regex') },
+ help: -> { s_('JiraService|Use regular expression to match Jira issue keys.') }
+
+ field :jira_issue_prefix,
+ section: SECTION_TYPE_CONFIGURATION,
+ required: false,
+ title: -> { s_('JiraService|Jira issue prefix') },
+ help: -> { s_('JiraService|Use a prefix to match Jira issue keys.') }
field :jira_issue_transition_id, api_only: true
@@ -90,8 +105,8 @@ module Integrations
end
# {PROJECT-KEY}-{NUMBER} Examples: JIRA-1, PROJECT-1
- def self.reference_pattern(only_long: true)
- @reference_pattern ||= /(?<issue>\b#{Gitlab::Regex.jira_issue_key_regex})/
+ def reference_pattern(only_long: true)
+ @reference_pattern ||= jira_issue_match_regex
end
def self.valid_jira_cloud_url?(url)
@@ -166,6 +181,11 @@ module Integrations
type: SECTION_TYPE_JIRA_TRIGGER,
title: _('Trigger'),
description: s_('JiraService|When a Jira issue is mentioned in a commit or merge request, a remote link and comment (if enabled) will be created.')
+ },
+ {
+ type: SECTION_TYPE_CONFIGURATION,
+ title: _('Jira issue matching'),
+ description: s_('Configure custom rules for Jira issue key matching')
}
]
@@ -325,6 +345,12 @@ module Integrations
private
+ def jira_issue_match_regex
+ match_regex = (jira_issue_regex.presence || Gitlab::Regex.jira_issue_key_regex)
+
+ /\b#{jira_issue_prefix}(?<issue>#{match_regex})/
+ end
+
def parse_project_from_issue_key(issue_key)
issue_key.gsub(Gitlab::Regex.jira_issue_key_project_key_extraction_regex, '')
end