summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bitbucket/representation/base.rb4
-rw-r--r--lib/bitbucket/representation/comment.rb2
-rw-r--r--lib/bitbucket/representation/issue.rb2
-rw-r--r--lib/bitbucket/representation/pull_request.rb2
-rw-r--r--lib/bitbucket/representation/user.rb6
-rw-r--r--lib/gitlab/bitbucket_import/importer.rb23
6 files changed, 29 insertions, 10 deletions
diff --git a/lib/bitbucket/representation/base.rb b/lib/bitbucket/representation/base.rb
index 94adaacc9b5..fd622d333da 100644
--- a/lib/bitbucket/representation/base.rb
+++ b/lib/bitbucket/representation/base.rb
@@ -5,6 +5,10 @@ module Bitbucket
@raw = raw
end
+ def user_representation(raw)
+ User.new(raw)
+ end
+
def self.decorate(entries)
entries.map { |entry| new(entry)}
end
diff --git a/lib/bitbucket/representation/comment.rb b/lib/bitbucket/representation/comment.rb
index 94bc18cbfab..bc40f891cd3 100644
--- a/lib/bitbucket/representation/comment.rb
+++ b/lib/bitbucket/representation/comment.rb
@@ -2,7 +2,7 @@ module Bitbucket
module Representation
class Comment < Representation::Base
def author
- user.fetch('username', 'Anonymous')
+ user_representation(user)
end
def note
diff --git a/lib/bitbucket/representation/issue.rb b/lib/bitbucket/representation/issue.rb
index 6c8e9a4c244..90adfa3331a 100644
--- a/lib/bitbucket/representation/issue.rb
+++ b/lib/bitbucket/representation/issue.rb
@@ -12,7 +12,7 @@ module Bitbucket
end
def author
- raw.dig('reporter', 'username') || 'Anonymous'
+ user_representation(raw.fetch('reporter', {}))
end
def description
diff --git a/lib/bitbucket/representation/pull_request.rb b/lib/bitbucket/representation/pull_request.rb
index e7b1f99e9a6..96992003d24 100644
--- a/lib/bitbucket/representation/pull_request.rb
+++ b/lib/bitbucket/representation/pull_request.rb
@@ -2,7 +2,7 @@ module Bitbucket
module Representation
class PullRequest < Representation::Base
def author
- raw.fetch('author', {}).fetch('username', 'Anonymous')
+ user_representation(raw.fetch('author', {}))
end
def description
diff --git a/lib/bitbucket/representation/user.rb b/lib/bitbucket/representation/user.rb
index ba6b7667b49..6025a9f0653 100644
--- a/lib/bitbucket/representation/user.rb
+++ b/lib/bitbucket/representation/user.rb
@@ -2,7 +2,11 @@ module Bitbucket
module Representation
class User < Representation::Base
def username
- raw['username']
+ raw['username'] || 'Anonymous'
+ end
+
+ def uuid
+ raw['uuid']
end
end
end
diff --git a/lib/gitlab/bitbucket_import/importer.rb b/lib/gitlab/bitbucket_import/importer.rb
index a0a17333185..519a109c0c8 100644
--- a/lib/gitlab/bitbucket_import/importer.rb
+++ b/lib/gitlab/bitbucket_import/importer.rb
@@ -24,15 +24,23 @@ module Gitlab
private
- def gitlab_user_id(project, bitbucket_id)
- if bitbucket_id
- user = User.joins(:identities).find_by("identities.extern_uid = ? AND identities.provider = 'bitbucket'", bitbucket_id.to_s)
+ def gitlab_user_id(project, user)
+ if user.uuid
+ user = find_user_by_uuid(user.uuid)
(user && user.id) || project.creator_id
else
project.creator_id
end
end
+ def find_user_by_uuid(uuid)
+ User.joins(:identities).find_by("identities.extern_uid = ? AND identities.provider = 'bitbucket'", uuid)
+ end
+
+ def existing_gitlab_user?(user)
+ user.uuid && find_user_by_uuid(user.uuid)
+ end
+
def repo
@repo ||= client.repo(project.import_source)
end
@@ -43,7 +51,8 @@ module Gitlab
create_labels
client.issues(repo).each do |issue|
- description = @formatter.author_line(issue.author)
+ description = ''
+ description += @formatter.author_line(issue.author.username) unless existing_gitlab_user?(issue.author)
description += issue.description
label_name = issue.kind
@@ -69,7 +78,8 @@ module Gitlab
# we do this check.
next unless comment.note.present?
- note = @formatter.author_line(comment.author)
+ note = ''
+ note += @formatter.author_line(comment.author.username) unless existing_gitlab_user?(comment.author)
note += comment.note
issue.notes.create!(
@@ -97,7 +107,8 @@ module Gitlab
pull_requests.each do |pull_request|
begin
- description = @formatter.author_line(pull_request.author)
+ description = ''
+ description += @formatter.author_line(pull_request.author.username) unless existing_gitlab_user?(pull_request.author)
description += pull_request.description
merge_request = project.merge_requests.create(