diff options
Diffstat (limited to 'lib/gitlab/bitbucket_import/importers/issue_importer.rb')
-rw-r--r-- | lib/gitlab/bitbucket_import/importers/issue_importer.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/gitlab/bitbucket_import/importers/issue_importer.rb b/lib/gitlab/bitbucket_import/importers/issue_importer.rb new file mode 100644 index 00000000000..2c3be67eabc --- /dev/null +++ b/lib/gitlab/bitbucket_import/importers/issue_importer.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +module Gitlab + module BitbucketImport + module Importers + class IssueImporter + include Loggable + include ErrorTracking + + def initialize(project, hash) + @project = project + @formatter = Gitlab::ImportFormatter.new + @user_finder = UserFinder.new(project) + @object = hash.with_indifferent_access + end + + def execute + log_info(import_stage: 'import_issue', message: 'starting', iid: object[:iid]) + + description = '' + description += author_line + description += object[:description] if object[:description] + + milestone = object[:milestone] ? project.milestones.find_or_create_by(title: object[:milestone]) : nil # rubocop: disable CodeReuse/ActiveRecord + + attributes = { + iid: object[:iid], + title: object[:title], + description: description, + state_id: Issue.available_states[object[:state]], + author_id: author_id, + assignee_ids: [author_id], + namespace_id: project.project_namespace_id, + milestone: milestone, + work_item_type_id: object[:issue_type_id], + label_ids: [object[:label_id]].compact, + created_at: object[:created_at], + updated_at: object[:updated_at] + } + + project.issues.create!(attributes) + + log_info(import_stage: 'import_issue', message: 'finished', iid: object[:iid]) + rescue StandardError => e + track_import_failure!(project, exception: e) + end + + private + + attr_reader :object, :project, :formatter, :user_finder + + def author_line + return '' if find_user_id + + formatter.author_line(object[:author]) + end + + def find_user_id + user_finder.find_user_id(object[:author]) + end + + def author_id + user_finder.gitlab_user_id(project, object[:author]) + end + end + end + end +end |