Skip to content
Snippets Groups Projects
Commit 5b0ebbe5 authored by Valery Sizov's avatar Valery Sizov
Browse files

Add Wiki import to BB importer

parent 2c49c1af
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -5,7 +5,7 @@ Bitbucket.org account.
 
## Overview
 
You can set up Bitbucket.org as an OAuth provider so that you can use your
You can set up Bitbucket.org as an OAuth2 provider so that you can use your
credentials to authenticate into GitLab or import your projects from
Bitbucket.org.
 
Loading
Loading
@@ -50,6 +50,7 @@ you to use.
Repositories: Read
Pull Requests: Read
Issues: Read
Wiki: Read and Write
```
 
![Bitbucket OAuth settings page](img/bitbucket_oauth_settings_page.png)
Loading
Loading
doc/integration/img/bitbucket_oauth_settings_page.png

5.48 KiB | W: 261px | H: 456px

doc/integration/img/bitbucket_oauth_settings_page.png

28 KiB | W: 1186px | H: 652px

doc/integration/img/bitbucket_oauth_settings_page.png
doc/integration/img/bitbucket_oauth_settings_page.png
doc/integration/img/bitbucket_oauth_settings_page.png
doc/integration/img/bitbucket_oauth_settings_page.png
  • 2-up
  • Swipe
  • Onion skin
Loading
Loading
@@ -17,6 +17,7 @@ to enable this if not already.
- the pull requests (GitLab 8.4+)
- the pull request comments (GitLab 8.15+)
- the milestones (GitLab 8.15+)
- the wiki (GitLab 8.15+)
- References to pull requests and issues are preserved (GitLab 8.7+)
- Repository public access is retained. If a repository is private in Bitbucket
it will be created as private in GitLab as well.
Loading
Loading
Loading
Loading
@@ -51,6 +51,10 @@ module Bitbucket
raw['scm'] == 'git'
end
 
def has_wiki?
raw['has_wiki']
end
def visibility_level
if raw['is_private']
Gitlab::VisibilityLevel::PRIVATE
Loading
Loading
module Gitlab
module BitbucketImport
class Importer
include Gitlab::ShellAdapter
LABELS = [{ title: 'bug', color: '#FF0000' },
{ title: 'enhancement', color: '#428BCA' },
{ title: 'proposal', color: '#69D100' },
Loading
Loading
@@ -18,6 +20,7 @@ module Gitlab
end
 
def execute
import_wiki
import_issues
import_pull_requests
handle_errors
Loading
Loading
@@ -55,6 +58,16 @@ module Gitlab
@repo ||= client.repo(project.import_source)
end
 
def import_wiki
return if project.wiki.repository_exists?
path_with_namespace = "#{project.path_with_namespace}.wiki"
import_url = project.import_url.sub(/\.git\z/, ".git/wiki")
gitlab_shell.import_repository(project.repository_storage_path, path_with_namespace, import_url)
rescue StandardError => e
errors << { type: :wiki, errors: e.message }
end
def import_issues
return unless repo.issues_enabled?
 
Loading
Loading
Loading
Loading
@@ -22,9 +22,16 @@ module Gitlab
import_type: 'bitbucket',
import_source: repo.full_name,
import_url: repo.clone_url(session_data[:token]),
import_data: { credentials: session_data }
import_data: { credentials: session_data },
skip_wiki: skip_wiki
).execute
end
private
def skip_wiki
repo.has_wiki?
end
end
end
end
require 'spec_helper'
describe Bitbucket::Representation::Repo do
describe '#has_wiki?' do
it { expect(described_class.new({ 'has_wiki' => false }).has_wiki?).to be_falsey }
it { expect(described_class.new({ 'has_wiki' => true }).has_wiki?).to be_truthy }
end
describe '#name' do
it { expect(described_class.new({ 'name' => 'test' }).name).to eq('test') }
end
describe '#valid?' do
it { expect(described_class.new({ 'scm' => 'hg' }).valid?).to be_falsey }
it { expect(described_class.new({ 'scm' => 'git' }).valid?).to be_truthy }
end
describe '#full_name' do
it { expect(described_class.new({ 'full_name' => 'test_full' }).full_name).to eq('test_full') }
end
describe '#description' do
it { expect(described_class.new({ 'description' => 'desc' }).description).to eq('desc') }
end
describe '#issues_enabled?' do
it { expect(described_class.new({ 'has_issues' => false }).issues_enabled?).to be_falsey }
it { expect(described_class.new({ 'has_issues' => true }).issues_enabled?).to be_truthy }
end
describe '#owner_and_slug' do
it { expect(described_class.new({ 'full_name' => 'ben/test' }).owner_and_slug).to eq(['ben', 'test']) }
end
describe '#owner' do
it { expect(described_class.new({ 'full_name' => 'ben/test' }).owner).to eq('ben') }
end
describe '#slug' do
it { expect(described_class.new({ 'full_name' => 'ben/test' }).slug).to eq('test') }
end
describe '#clone_url' do
it 'builds url' do
data = { 'links' => { 'clone' => [ { 'name' => 'https', 'href' => 'https://bibucket.org/test/test.git' }] } }
expect(described_class.new(data).clone_url('abc')).to eq('https://x-token-auth:abc@bibucket.org/test/test.git')
end
end
end
Loading
Loading
@@ -69,6 +69,9 @@ describe Gitlab::BitbucketImport::Importer, lib: true do
 
context 'issues statuses' do
before do
# HACK: Bitbucket::Representation.const_get('Issue') seems to return ::Issue without this
Bitbucket::Representation::Issue.new({})
stub_request(
:get,
"https://api.bitbucket.org/2.0/repositories/#{project_identifier}"
Loading
Loading
@@ -108,13 +111,16 @@ describe Gitlab::BitbucketImport::Importer, lib: true do
body: {}.to_json)
end
 
it 'map statuses to open or closed' do
# HACK: Bitbucket::Representation.const_get('Issue') seems to return ::Issue without this
Bitbucket::Representation::Issue.new({})
it 'maps statuses to open or closed' do
importer.execute
 
expect(project.issues.where(state: "closed").size).to eq(5)
expect(project.issues.where(state: "opened").size).to eq(2)
end
it 'calls import_wiki' do
expect(importer).to receive(:import_wiki)
importer.execute
end
end
end
Loading
Loading
@@ -11,7 +11,8 @@ describe Gitlab::BitbucketImport::ProjectCreator, lib: true do
owner: "asd",
full_name: 'Vim repo',
visibility_level: Gitlab::VisibilityLevel::PRIVATE,
clone_url: 'ssh://git@bitbucket.org/asd/vim.git')
clone_url: 'ssh://git@bitbucket.org/asd/vim.git',
has_wiki?: false)
end
 
let(:namespace){ create(:group, owner: user) }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment