diff options
Diffstat (limited to 'app/models/project_services/jira_service.rb')
-rw-r--r-- | app/models/project_services/jira_service.rb | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index 36d7026de30..732da62863f 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -5,6 +5,7 @@ class JiraService < IssueTrackerService include Gitlab::Routing include ApplicationHelper include ActionView::Helpers::AssetUrlHelper + include Gitlab::Utils::StrongMemoize PROJECTS_PER_PAGE = 50 @@ -32,6 +33,7 @@ class JiraService < IssueTrackerService data_field :username, :password, :url, :api_url, :jira_issue_transition_id, :project_key, :issues_enabled before_update :reset_password + after_commit :update_deployment_type, on: [:create, :update], if: :update_deployment_type? enum comment_detail: { standard: 1, @@ -212,7 +214,7 @@ class JiraService < IssueTrackerService end def test(_) - result = test_settings + result = server_info success = result.present? result = @error&.message unless success @@ -231,10 +233,10 @@ class JiraService < IssueTrackerService private - def test_settings - return unless client_url.present? - - jira_request { client.ServerInfo.all.attrs } + def server_info + strong_memoize(:server_info) do + client_url.present? ? jira_request { client.ServerInfo.all.attrs } : nil + end end def can_cross_reference?(noteable) @@ -436,6 +438,26 @@ class JiraService < IssueTrackerService url_changed? end + def update_deployment_type? + (api_url_changed? || url_changed? || username_changed? || password_changed?) && + can_test? + end + + def update_deployment_type + clear_memoization(:server_info) # ensure we run the request when we try to update deployment type + results = server_info + return data_fields.deployment_unknown! unless results.present? + + case results['deploymentType'] + when 'Server' + data_fields.deployment_server! + when 'Cloud' + data_fields.deployment_cloud! + else + data_fields.deployment_unknown! + end + end + def self.event_description(event) case event when "merge_request", "merge_request_events" |