Class: Gitlab::GithubImport::Importer::IssueImporter
- Inherits:
-
Object
- Object
- Gitlab::GithubImport::Importer::IssueImporter
- Includes:
- Import::DatabaseHelpers
- Defined in:
- lib/gitlab/github_import/importer/issue_importer.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#issuable_finder ⇒ Object
readonly
Returns the value of attribute issuable_finder.
-
#issue ⇒ Object
readonly
Returns the value of attribute issue.
-
#milestone_finder ⇒ Object
readonly
Returns the value of attribute milestone_finder.
-
#project ⇒ Object
readonly
Returns the value of attribute project.
-
#user_finder ⇒ Object
readonly
Returns the value of attribute user_finder.
Class Method Summary collapse
-
.import_if_issue(issue, project, client) ⇒ Object
Imports an issue if it’s a regular issue and not a pull request.
Instance Method Summary collapse
-
#create_assignees(issue_id) ⇒ Object
Stores all issue assignees in the database.
-
#create_issue ⇒ Object
Creates a new GitLab issue for the current GitHub issue.
- #execute ⇒ Object
-
#initialize(issue, project, client) ⇒ IssueImporter
constructor
issue - An instance of ‘Gitlab::GithubImport::Representation::Issue`.
-
#update_search_data(issue_id) ⇒ Object
Adds search data to database (if full_text_search feature is enabled).
Methods included from Import::DatabaseHelpers
Constructor Details
#initialize(issue, project, client) ⇒ IssueImporter
issue - An instance of ‘Gitlab::GithubImport::Representation::Issue`. project - An instance of `Project` client - An instance of `Gitlab::GithubImport::Client`
20 21 22 23 24 25 26 27 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 20 def initialize(issue, project, client) @issue = issue @project = project @client = client @user_finder = GithubImport::UserFinder.new(project, client) @milestone_finder = MilestoneFinder.new(project) @issuable_finder = GithubImport::IssuableFinder.new(project, issue) end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def client @client end |
#issuable_finder ⇒ Object (readonly)
Returns the value of attribute issuable_finder.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def issuable_finder @issuable_finder end |
#issue ⇒ Object (readonly)
Returns the value of attribute issue.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def issue @issue end |
#milestone_finder ⇒ Object (readonly)
Returns the value of attribute milestone_finder.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def milestone_finder @milestone_finder end |
#project ⇒ Object (readonly)
Returns the value of attribute project.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def project @project end |
#user_finder ⇒ Object (readonly)
Returns the value of attribute user_finder.
9 10 11 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 9 def user_finder @user_finder end |
Class Method Details
.import_if_issue(issue, project, client) ⇒ Object
Imports an issue if it’s a regular issue and not a pull request.
13 14 15 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 13 def self.import_if_issue(issue, project, client) new(issue, project, client).execute unless issue.pull_request? end |
Instance Method Details
#create_assignees(issue_id) ⇒ Object
Stores all issue assignees in the database.
issue_id - The ID of the created issue.
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 75 def create_assignees(issue_id) assignees = [] issue.assignees.each do |assignee| if (user_id = user_finder.user_id_for(assignee)) assignees << { issue_id: issue_id, user_id: user_id } end end ApplicationRecord.legacy_bulk_insert(IssueAssignee.table_name, assignees) # rubocop:disable Gitlab/BulkInsert end |
#create_issue ⇒ Object
Creates a new GitLab issue for the current GitHub issue.
Returns the ID of the created issue as an Integer. If the issue couldn’t be created this method will return ‘nil` instead.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 43 def create_issue , = user_finder.(issue) description = MarkdownText.format(issue.description, issue., ) attributes = { iid: issue.iid, title: issue.truncated_title, author_id: , project_id: project.id, namespace_id: project.project_namespace_id, description: description, milestone_id: milestone_finder.id_for(issue), state_id: ::Issue.available_states[issue.state], created_at: issue.created_at, updated_at: issue.updated_at, work_item_type_id: issue.work_item_type_id } issue = project.issues.new(attributes.merge(importing: true)) issue.validate! insert_and_return_id(attributes, project.issues) rescue ActiveRecord::InvalidForeignKey # It's possible the project has been deleted since scheduling this # job. In this case we'll just skip creating the issue. end |
#execute ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 29 def execute Issue.transaction do if (issue_id = create_issue) create_assignees(issue_id) issuable_finder.cache_database_id(issue_id) update_search_data(issue_id) end end end |
#update_search_data(issue_id) ⇒ Object
Adds search data to database (if full_text_search feature is enabled)
issue_id - The ID of the created issue.
90 91 92 |
# File 'lib/gitlab/github_import/importer/issue_importer.rb', line 90 def update_search_data(issue_id) project.issues.find(issue_id)&.update_search_data! end |