From 00cd864237d6c7ec57ecb49d304ca8dfa9e41d31 Mon Sep 17 00:00:00 2001
From: Valery Sizov <valery@gitlab.com>
Date: Wed, 7 Dec 2016 18:04:02 +0200
Subject: [PATCH] BitBucket importer: import issues with labels

---
 lib/bitbucket/representation/issue.rb   |  4 ++++
 lib/gitlab/bitbucket_import/importer.rb | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/lib/bitbucket/representation/issue.rb b/lib/bitbucket/representation/issue.rb
index dc034c19750..6c8e9a4c244 100644
--- a/lib/bitbucket/representation/issue.rb
+++ b/lib/bitbucket/representation/issue.rb
@@ -7,6 +7,10 @@ module Bitbucket
         raw['id']
       end
 
+      def kind
+        raw['kind']
+      end
+
       def author
         raw.dig('reporter', 'username') || 'Anonymous'
       end
diff --git a/lib/gitlab/bitbucket_import/importer.rb b/lib/gitlab/bitbucket_import/importer.rb
index fba382e6fea..8852f5b0f3f 100644
--- a/lib/gitlab/bitbucket_import/importer.rb
+++ b/lib/gitlab/bitbucket_import/importer.rb
@@ -1,12 +1,18 @@
 module Gitlab
   module BitbucketImport
     class Importer
+      LABELS = [{ title: 'bug', color: '#FF0000'},
+                { title: 'enhancement', color: '#428BCA'},
+                { title: 'proposal', color: '#69D100'},
+                { title: 'task', color: '#7F8C8D'}].freeze
+
       attr_reader :project, :client
 
       def initialize(project)
         @project = project
         @client = Bitbucket::Client.new(project.import_data.credentials)
         @formatter = Gitlab::ImportFormatter.new
+        @labels = {}
       end
 
       def execute
@@ -34,10 +40,14 @@ module Gitlab
       def import_issues
         return unless repo.issues_enabled?
 
+        create_labels
+
         client.issues(repo).each do |issue|
           description = @formatter.author_line(issue.author)
           description += issue.description
 
+          label_name = issue.kind
+
           issue = project.issues.create(
             iid: issue.iid,
             title: issue.title,
@@ -48,6 +58,8 @@ module Gitlab
             updated_at: issue.updated_at
           )
 
+          assign_label(issue, label_name)
+
           if issue.persisted?
             client.issue_comments(repo, issue.iid).each do |comment|
               # The note can be blank for issue service messages like "Changed title: ..."
@@ -74,6 +86,16 @@ module Gitlab
         Rails.logger.error("Bitbucket importer ERROR in #{project.path_with_namespace}: Couldn't import record properly #{e.message}")
       end
 
+      def create_labels
+        LABELS.each do |label|
+          @labels[label[:title]] = project.labels.create!(label)
+        end
+      end
+
+      def assign_label(issue, label_name)
+        issue.labels << @labels[label_name]
+      end
+
       def import_pull_requests
         pull_requests = client.pull_requests(repo)
 
-- 
2.30.9