diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-09 12:09:24 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-09 12:09:24 +0000 |
commit | a9ced7da447785c57477b3d8dbccc73a78cface1 (patch) | |
tree | 5179d27ab9d801748ee4ed1c64c985974e799812 /app/models | |
parent | ad0265eead72a624ce7a020847db4f0f0c877e57 (diff) | |
download | gitlab-ce-a9ced7da447785c57477b3d8dbccc73a78cface1.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/concerns/import_state/sidekiq_job_tracker.rb | 2 | ||||
-rw-r--r-- | app/models/jira_import_data.rb | 46 | ||||
-rw-r--r-- | app/models/jira_import_state.rb | 11 | ||||
-rw-r--r-- | app/models/project.rb | 14 |
4 files changed, 15 insertions, 58 deletions
diff --git a/app/models/concerns/import_state/sidekiq_job_tracker.rb b/app/models/concerns/import_state/sidekiq_job_tracker.rb index 6bb07b7c06a..55f171d158d 100644 --- a/app/models/concerns/import_state/sidekiq_job_tracker.rb +++ b/app/models/concerns/import_state/sidekiq_job_tracker.rb @@ -16,7 +16,7 @@ module ImportState end def self.jid_by(project_id:, status:) - select(:jid).with_status(status).find_by(project_id: project_id) + select(:jid).where(status: status).find_by(project_id: project_id) end end end diff --git a/app/models/jira_import_data.rb b/app/models/jira_import_data.rb deleted file mode 100644 index b39ca7290be..00000000000 --- a/app/models/jira_import_data.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -class JiraImportData < ProjectImportData - JiraProjectDetails = Struct.new(:key, :scheduled_at, :scheduled_by) - - FORCE_IMPORT_KEY = 'force-import' - - def projects - return [] unless data - - projects = data.dig('jira', 'projects')&.map do |p| - JiraProjectDetails.new(p['key'], p['scheduled_at'], p['scheduled_by']) - end - - projects&.sort_by { |jp| jp.scheduled_at } || [] - end - - def <<(project) - self.data ||= { 'jira' => { 'projects' => [] } } - self.data['jira'] ||= { 'projects' => [] } - self.data['jira']['projects'] = [] if data['jira']['projects'].blank? || !data['jira']['projects'].is_a?(Array) - - self.data['jira']['projects'] << project.to_h - self.data.deep_stringify_keys! - end - - def force_import! - self.data ||= {} - self.data.deep_merge!({ 'jira' => { FORCE_IMPORT_KEY => true } }) - self.data.deep_stringify_keys! - end - - def force_import? - !!data&.dig('jira', FORCE_IMPORT_KEY) && !projects.blank? - end - - def finish_import! - return if data&.dig('jira', FORCE_IMPORT_KEY).nil? - - data['jira'].delete(FORCE_IMPORT_KEY) - end - - def current_project - projects.last - end -end diff --git a/app/models/jira_import_state.rb b/app/models/jira_import_state.rb index 713feec013f..ec1b8f03d36 100644 --- a/app/models/jira_import_state.rb +++ b/app/models/jira_import_state.rb @@ -22,6 +22,8 @@ class JiraImportState < ApplicationRecord message: _('Cannot have multiple Jira imports running at the same time') } + alias_method :scheduled_by, :user + state_machine :status, initial: :initial do event :schedule do transition initial: :scheduled @@ -46,6 +48,11 @@ class JiraImportState < ApplicationRecord end end + before_transition any => :finished do |state, _| + InternalId.flush_records!(project: state.project) + state.project.update_project_counter_caches + end + after_transition any => :finished do |state, _| if state.jid.present? Gitlab::SidekiqStatus.unset(state.jid) @@ -67,4 +74,8 @@ class JiraImportState < ApplicationRecord def in_progress? scheduled? || started? end + + def non_initial? + !initial? + end end diff --git a/app/models/project.rb b/app/models/project.rb index 15b8d5db214..1f968cdfad1 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -859,9 +859,7 @@ class Project < ApplicationRecord end def jira_import_status - return import_status if jira_force_import? - - import_data&.becomes(JiraImportData)&.projects.blank? ? 'none' : 'finished' + latest_jira_import&.status || 'initial' end def human_import_status_name @@ -875,8 +873,6 @@ class Project < ApplicationRecord elsif gitlab_project_import? # Do not retry on Import/Export until https://gitlab.com/gitlab-org/gitlab-foss/issues/26189 is solved. RepositoryImportWorker.set(retry: false).perform_async(self.id) - elsif jira_import? - Gitlab::JiraImport::Stage::StartImportWorker.perform_async(self.id) else RepositoryImportWorker.perform_async(self.id) end @@ -909,7 +905,7 @@ class Project < ApplicationRecord # This method is overridden in EE::Project model def remove_import_data - import_data&.destroy unless jira_import? + import_data&.destroy end def ci_config_path=(value) @@ -972,11 +968,7 @@ class Project < ApplicationRecord end def jira_import? - import_type == 'jira' && Feature.enabled?(:jira_issue_import, self) - end - - def jira_force_import? - jira_import? && import_data&.becomes(JiraImportData)&.force_import? + import_type == 'jira' && latest_jira_import.present? && Feature.enabled?(:jira_issue_import, self) end def gitlab_project_import? |