summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Speicher <robert@gitlab.com>2016-04-18 20:50:07 +0000
committerRobert Speicher <robert@gitlab.com>2016-04-18 20:50:07 +0000
commit17b60d681828567e47c8a62ef312abc46e2beeea (patch)
tree2714a8bc5f1b9a1f5665c26e00d23fd3b930b341
parent387b025d15c3e0536d37128c282e02e9025dcd75 (diff)
parent696b1e965732e229f9b0f6f49297e78265379bb4 (diff)
downloadgitlab-ce-17b60d681828567e47c8a62ef312abc46e2beeea.tar.gz
Merge branch 'gh-import-labels' into 'master'
Import labels from GitHub Closes #15292 See merge request !3776
-rw-r--r--CHANGELOG1
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock10
-rw-r--r--lib/gitlab/github_import/importer.rb26
-rw-r--r--lib/gitlab/github_import/label_formatter.rb23
-rw-r--r--spec/lib/gitlab/github_import/label_formatter_spec.rb19
6 files changed, 74 insertions, 7 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 2882a81afc2..290c9568149 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -85,6 +85,7 @@ v 8.7.0 (unreleased)
- Show number sign on external issue reference text (Florent Baldino)
- Updated print style for issues
- Use GitHub Issue/PR number as iid to keep references
+ - Import GitHub labels
v 8.6.6
- Expire the exists cache before deletion to ensure project dir actually exists (Stan Hu). !3413
diff --git a/Gemfile b/Gemfile
index 199ef65d922..8caa749a8d4 100644
--- a/Gemfile
+++ b/Gemfile
@@ -315,7 +315,7 @@ end
gem "newrelic_rpm", '~> 3.14'
-gem 'octokit', '~> 3.8.0'
+gem 'octokit', '~> 4.3.0'
gem "mail_room", "~> 0.6.1"
diff --git a/Gemfile.lock b/Gemfile.lock
index ad7d7c18559..958824f7ed9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -485,8 +485,8 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (~> 1.2)
- octokit (3.8.0)
- sawyer (~> 0.6.0, >= 0.5.3)
+ octokit (4.3.0)
+ sawyer (~> 0.7.0, >= 0.5.3)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
@@ -712,8 +712,8 @@ GEM
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
- sawyer (0.6.0)
- addressable (~> 2.3.5)
+ sawyer (0.7.0)
+ addressable (>= 2.3.5, < 2.5)
faraday (~> 0.8, < 0.10)
scss_lint (0.47.1)
rake (>= 0.9, < 11)
@@ -968,7 +968,7 @@ DEPENDENCIES
newrelic_rpm (~> 3.14)
nokogiri (~> 1.6.7, >= 1.6.7.2)
oauth2 (~> 1.0.0)
- octokit (~> 3.8.0)
+ octokit (~> 4.3.0)
omniauth (~> 1.3.1)
omniauth-auth0 (~> 1.4.1)
omniauth-azure-oauth2 (~> 0.0.6)
diff --git a/lib/gitlab/github_import/importer.rb b/lib/gitlab/github_import/importer.rb
index 0b1ed510229..7f70ab63f37 100644
--- a/lib/gitlab/github_import/importer.rb
+++ b/lib/gitlab/github_import/importer.rb
@@ -16,7 +16,7 @@ module Gitlab
end
def execute
- import_issues && import_pull_requests && import_wiki
+ import_labels && import_issues && import_pull_requests && import_wiki
end
private
@@ -25,6 +25,16 @@ module Gitlab
@import_data_credentials ||= project.import_data.credentials if project.import_data
end
+ def import_labels
+ client.labels(project.import_source).each do |raw_data|
+ Label.create!(LabelFormatter.new(project, raw_data).attributes)
+ end
+
+ true
+ rescue ActiveRecord::RecordInvalid => e
+ raise Projects::ImportService::Error, e.message
+ end
+
def import_issues
client.list_issues(project.import_source, state: :all,
sort: :created,
@@ -33,6 +43,7 @@ module Gitlab
if gh_issue.valid?
issue = Issue.create!(gh_issue.attributes)
+ apply_labels(gh_issue.number, issue)
if gh_issue.has_comments?
import_comments(gh_issue.number, issue)
@@ -55,6 +66,7 @@ module Gitlab
merge_request = MergeRequest.new(pull_request.attributes)
if merge_request.save
+ apply_labels(pull_request.number, merge_request)
import_comments(pull_request.number, merge_request)
import_comments_on_diff(pull_request.number, merge_request)
end
@@ -66,6 +78,18 @@ module Gitlab
raise Projects::ImportService::Error, e.message
end
+ def apply_labels(number, issuable)
+ issue = client.issue(project.import_source, number)
+
+ if issue.labels.count > 0
+ label_ids = issue.labels.map do |raw|
+ Label.find_by(LabelFormatter.new(project, raw).attributes).try(:id)
+ end
+
+ issuable.update_attribute(:label_ids, label_ids)
+ end
+ end
+
def import_comments(issue_number, noteable)
comments = client.issue_comments(project.import_source, issue_number)
create_comments(comments, noteable)
diff --git a/lib/gitlab/github_import/label_formatter.rb b/lib/gitlab/github_import/label_formatter.rb
new file mode 100644
index 00000000000..c2b9d40b511
--- /dev/null
+++ b/lib/gitlab/github_import/label_formatter.rb
@@ -0,0 +1,23 @@
+module Gitlab
+ module GithubImport
+ class LabelFormatter < BaseFormatter
+ def attributes
+ {
+ project: project,
+ title: title,
+ color: color
+ }
+ end
+
+ private
+
+ def color
+ "##{raw_data.color}"
+ end
+
+ def title
+ raw_data.name
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/github_import/label_formatter_spec.rb b/spec/lib/gitlab/github_import/label_formatter_spec.rb
new file mode 100644
index 00000000000..e94440a7fb0
--- /dev/null
+++ b/spec/lib/gitlab/github_import/label_formatter_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+describe Gitlab::GithubImport::LabelFormatter, lib: true do
+
+ describe '#attributes' do
+ it 'returns formatted attributes' do
+ project = create(:project)
+ raw = double(name: 'improvements', color: 'e6e6e6')
+
+ formatter = described_class.new(project, raw)
+
+ expect(formatter.attributes).to eq({
+ project: project,
+ title: 'improvements',
+ color: '#e6e6e6'
+ })
+ end
+ end
+end