Add Wiki import to BB importer
This commit is contained in:
parent
2c49c1af66
commit
5b0ebbe5b4
9 changed files with 88 additions and 6 deletions
|
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 28 KiB |
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
module Gitlab
|
||||
module BitbucketImport
|
||||
class Importer
|
||||
include Gitlab::ShellAdapter
|
||||
|
||||
LABELS = [{ title: 'bug', color: '#FF0000' },
|
||||
{ title: 'enhancement', color: '#428BCA' },
|
||||
{ title: 'proposal', color: '#69D100' },
|
||||
|
@ -18,6 +20,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def execute
|
||||
import_wiki
|
||||
import_issues
|
||||
import_pull_requests
|
||||
handle_errors
|
||||
|
@ -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?
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
49
spec/lib/bitbucket/representation/repo_spec.rb
Normal file
49
spec/lib/bitbucket/representation/repo_spec.rb
Normal file
|
@ -0,0 +1,49 @@
|
|||
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
|
|
@ -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}"
|
||||
|
@ -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
|
||||
|
|
|
@ -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…
Reference in a new issue