diff options
author | Rémy Coutable <remy@rymai.me> | 2017-10-05 10:43:18 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-10-05 10:48:26 +0200 |
commit | a55e150177934145c3daeecb678cce1b16f0a3b8 (patch) | |
tree | 5b9e4fe9c800b0ffab2f08eb3b8b04dcd5ece464 | |
parent | f96b4f41412b4e974fe77a1b58d6570252fd62d9 (diff) | |
download | gitlab-ce-a55e150177934145c3daeecb678cce1b16f0a3b8.tar.gz |
Set `label_ids` and `assignee_ids` after the initial `save!`.
Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r-- | lib/github/import.rb | 18 | ||||
-rw-r--r-- | lib/github/representation/issuable.rb | 14 | ||||
-rw-r--r-- | lib/github/representation/issue.rb | 20 | ||||
-rw-r--r-- | lib/github/representation/pull_request.rb | 10 |
4 files changed, 42 insertions, 20 deletions
diff --git a/lib/github/import.rb b/lib/github/import.rb index 239cf53075c..853f419d44e 100644 --- a/lib/github/import.rb +++ b/lib/github/import.rb @@ -99,7 +99,7 @@ module Github label.color = representation.color end - cached[:label_ids][label.title] = label.id + cached[:label_ids][representation.title] = label.id rescue => e error(:label, representation.url, e.message) end @@ -211,11 +211,11 @@ module Github # for both features, like manipulating assignees, labels # and milestones, are provided within the Issues API. if representation.pull_request? - return unless representation.has_labels? || representation.has_comments? + return unless representation.labels? || representation.has_comments? merge_request = MergeRequest.find_by!(target_project_id: project.id, iid: representation.iid) - if representation.has_labels? + if representation.labels? merge_request.update_attribute(:label_ids, label_ids(representation.labels)) end @@ -230,14 +230,16 @@ module Github issue.title = representation.title issue.description = format_description(representation.description, representation.author) issue.state = representation.state - issue.label_ids = label_ids(representation.labels) issue.milestone_id = milestone_id(representation.milestone) issue.author_id = author_id - issue.assignee_ids = [user_id(representation.assignee)] issue.created_at = representation.created_at issue.updated_at = representation.updated_at issue.save!(validate: false) + issue.update( + label_ids: label_ids(representation.labels), + assignee_ids: assignee_ids(representation.assignees)) + fetch_comments_conditionally(issue, representation) end rescue => e @@ -310,7 +312,11 @@ module Github end def label_ids(labels) - labels.map { |attrs| cached[:label_ids][attrs.fetch('name')] }.compact + labels.map { |label| cached[:label_ids][label.title] }.compact + end + + def assignee_ids(assignees) + assignees.map { |assignee| user_id(assignee) }.compact end def milestone_id(milestone) diff --git a/lib/github/representation/issuable.rb b/lib/github/representation/issuable.rb index 9713b82615d..348b26ea902 100644 --- a/lib/github/representation/issuable.rb +++ b/lib/github/representation/issuable.rb @@ -23,14 +23,16 @@ module Github @author ||= Github::Representation::User.new(raw['user'], options) end - def assignee - return unless assigned? - - @assignee ||= Github::Representation::User.new(raw['assignee'], options) + def labels? + raw['labels'].any? end - def assigned? - raw['assignee'].present? + def labels + return [] unless labels? + + @labels ||= raw['labels'].map do |label| + Github::Representation::Label.new(label, options) + end end end end diff --git a/lib/github/representation/issue.rb b/lib/github/representation/issue.rb index df3540a6e6c..c0a6d349e33 100644 --- a/lib/github/representation/issue.rb +++ b/lib/github/representation/issue.rb @@ -1,10 +1,6 @@ module Github module Representation class Issue < Representation::Issuable - def labels - raw['labels'] - end - def state raw['state'] == 'closed' ? 'closed' : 'opened' end @@ -13,13 +9,21 @@ module Github raw['comments'] > 0 end - def has_labels? - labels.count > 0 - end - def pull_request? raw['pull_request'].present? end + + def assigned? + raw['assignees'].present? + end + + def assignees + return [] unless assigned? + + @assignees ||= raw['assignees'].map do |user| + Github::Representation::User.new(user, options) + end + end end end end diff --git a/lib/github/representation/pull_request.rb b/lib/github/representation/pull_request.rb index bb35061c642..9baa7af4ffa 100644 --- a/lib/github/representation/pull_request.rb +++ b/lib/github/representation/pull_request.rb @@ -37,6 +37,16 @@ module Github source_branch.valid? && target_branch.valid? end + def assigned? + raw['assignee'].present? + end + + def assignee + return unless assigned? + + @assignee ||= Github::Representation::User.new(raw['assignee'], options) + end + private def project |