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 'lib/gitlab/jira_import/issue_serializer.rb')
-rw-r--r--lib/gitlab/jira_import/issue_serializer.rb62
1 files changed, 23 insertions, 39 deletions
diff --git a/lib/gitlab/jira_import/issue_serializer.rb b/lib/gitlab/jira_import/issue_serializer.rb
index cdcb62ac6e9..df57680073e 100644
--- a/lib/gitlab/jira_import/issue_serializer.rb
+++ b/lib/gitlab/jira_import/issue_serializer.rb
@@ -3,15 +3,14 @@
module Gitlab
module JiraImport
class IssueSerializer
- attr_reader :jira_issue, :project, :params, :formatter
- attr_accessor :metadata
+ attr_reader :jira_issue, :project, :import_owner_id, :params, :formatter
- def initialize(project, jira_issue, params = {})
+ def initialize(project, jira_issue, import_owner_id, params = {})
@jira_issue = jira_issue
@project = project
+ @import_owner_id = import_owner_id
@params = params
@formatter = Gitlab::ImportFormatter.new
- @metadata = []
end
def execute
@@ -23,7 +22,9 @@ module Gitlab
state_id: map_status(jira_issue.status.statusCategory),
updated_at: jira_issue.updated,
created_at: jira_issue.created,
- author_id: project.creator_id # TODO: map actual author: https://gitlab.com/gitlab-org/gitlab/-/issues/210580
+ author_id: reporter,
+ assignee_ids: assignees,
+ label_ids: label_ids
}
end
@@ -35,10 +36,8 @@ module Gitlab
def description
body = []
- body << formatter.author_line(jira_issue.reporter.displayName)
- body << formatter.assignee_line(jira_issue.assignee.displayName) if jira_issue.assignee
body << jira_issue.description
- body << add_metadata
+ body << MetadataCollector.new(jira_issue).execute
body.join
end
@@ -52,48 +51,33 @@ module Gitlab
end
end
- def add_metadata
- add_field(%w(issuetype name), 'Issue type')
- add_field(%w(priority name), 'Priority')
- add_labels
- add_field('environment', 'Environment')
- add_field('duedate', 'Due date')
- add_parent
- add_versions
-
- return if metadata.empty?
-
- metadata.join("\n").prepend("\n\n---\n\n**Issue metadata**\n\n")
+ def map_user_id(jira_user)
+ Gitlab::JiraImport::UserMapper.new(project, jira_user).execute&.id
end
- def add_field(keys, field_label)
- value = fields.dig(*keys)
- return if value.blank?
-
- metadata << "- #{field_label}: #{value}"
+ def reporter
+ map_user_id(jira_issue.reporter&.attrs) || import_owner_id
end
- def add_labels
- return if fields['labels'].blank?
-
- metadata << "- Labels: #{fields['labels'].join(', ')}"
- end
+ def assignees
+ found_user_id = map_user_id(jira_issue.assignee&.attrs)
- def add_parent
- parent_issue_key = fields.dig('parent', 'key')
- return if parent_issue_key.blank?
+ return unless found_user_id
- metadata << "- Parent issue: [#{parent_issue_key}] #{fields['parent']['fields']['summary']}"
+ [found_user_id]
end
- def add_versions
- return if fields['fixVersions'].blank?
+ # We already create labels in Gitlab::JiraImport::LabelsImporter stage but
+ # there is a possibility it may fail or
+ # new labels were created on the Jira in the meantime
+ def label_ids
+ return if jira_issue.fields['labels'].blank?
- metadata << "- Fix versions: #{fields['fixVersions'].map { |version| version['name'] }.join(', ')}"
+ Gitlab::JiraImport::HandleLabelsService.new(project, jira_issue.fields['labels']).execute
end
- def fields
- jira_issue.fields
+ def logger
+ @logger ||= Gitlab::Import::Logger.build
end
end
end