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/project_services/jira_service.rb')
-rw-r--r--app/models/project_services/jira_service.rb32
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"