Commit 9c76a6fa authored by Stan Hu's avatar Stan Hu
Browse files

Show incompatible projects in Google Code import status

Importing a JSON file with only one Subversion project lead to confusion
over whether the system was working. Provide status why these projects
could not be imported directly.

Closes #1531
parent 39a55bdf
...@@ -19,7 +19,7 @@ v 7.11.0 (unreleased) ...@@ -19,7 +19,7 @@ v 7.11.0 (unreleased)
- Include commit comments in MR from a forked project. - Include commit comments in MR from a forked project.
- Fix adding new group members from admin area - Fix adding new group members from admin area
- Add default project and snippet visibility settings to the admin web UI. - Add default project and snippet visibility settings to the admin web UI.
- - Show incompatible projects in Google Code import status (Stan Hu)
- Fix bug where commit data would not appear in some subdirectories (Stan Hu) - Fix bug where commit data would not appear in some subdirectories (Stan Hu)
- Fix bug where Slack service channel was not saved in admin template settings. (Stan Hu) - Fix bug where Slack service channel was not saved in admin template settings. (Stan Hu)
- Move snippets UI to fluid layout - Move snippets UI to fluid layout
......
...@@ -72,6 +72,7 @@ def status ...@@ -72,6 +72,7 @@ def status
end end
@repos = client.repos @repos = client.repos
@incompatible_repos = client.incompatible_repos
@already_added_projects = current_user.created_projects.where(import_type: "google_code") @already_added_projects = current_user.created_projects.where(import_type: "google_code")
already_added_projects_names = @already_added_projects.pluck(:import_source) already_added_projects_names = @already_added_projects.pluck(:import_source)
......
...@@ -2,15 +2,19 @@ ...@@ -2,15 +2,19 @@
%i.fa.fa-google %i.fa.fa-google
Import projects from Google Code Import projects from Google Code
%p.light - if @repos.any?
Select projects you want to import. %p.light
%p.light Select projects you want to import.
Optionally, you can %p.light
= link_to "customize", new_user_map_import_google_code_path Optionally, you can
how Google Code email addresses and usernames are imported into GitLab. = link_to "customize", new_user_map_import_google_code_path
%hr how Google Code email addresses and usernames are imported into GitLab.
%p %hr
= button_tag 'Import all projects', class: "btn btn-success js-import-all" %p
- if @incompatible_repos.any?
= button_tag 'Import all compatible projects', class: "btn btn-success js-import-all"
- else
= button_tag 'Import all projects', class: "btn btn-success js-import-all"
%table.table.import-jobs %table.table.import-jobs
%thead %thead
...@@ -44,6 +48,22 @@ ...@@ -44,6 +48,22 @@
= "#{current_user.username}/#{repo.name}" = "#{current_user.username}/#{repo.name}"
%td.import-actions.job-status %td.import-actions.job-status
= button_tag "Import", class: "btn js-add-to-import" = button_tag "Import", class: "btn js-add-to-import"
- @incompatible_repos.each do |repo|
%tr{id: "repo_#{repo.id}"}
%td
= link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank"
%td.import-target
%td.import-actions-job-status
= label_tag "Incompatible Project", nil, class: "label label-danger"
- if @incompatible_repos.any?
%p
One or more of your Google Code projects cannot be imported into GitLab
directly because they use Subversion or Mercurial for version control,
rather than Git. Please convert them to Git on Google Code, and go
through the
= link_to "import flow", new_import_google_code_path
again.
:coffeescript :coffeescript
new ImporterStatus("#{jobs_import_google_code_path}", "#{import_google_code_path}") new ImporterStatus("#{jobs_import_google_code_path}", "#{import_google_code_path}")
...@@ -21,6 +21,10 @@ def repos ...@@ -21,6 +21,10 @@ def repos
@repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.select(&:git?) @repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.select(&:git?)
end end
def incompatible_repos
@incompatible_repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.reject(&:git?)
end
def repo(id) def repo(id)
repos.find { |repo| repo.id == id } repos.find { |repo| repo.id == id }
end end
......
...@@ -27,21 +27,34 @@ ...@@ -27,21 +27,34 @@
it "assigns variables" do it "assigns variables" do
@project = create(:project, import_type: 'google_code', creator_id: user.id) @project = create(:project, import_type: 'google_code', creator_id: user.id)
controller.stub_chain(:client, :repos).and_return([@repo]) controller.stub_chain(:client, :repos).and_return([@repo])
controller.stub_chain(:client, :incompatible_repos).and_return([])
get :status get :status
expect(assigns(:already_added_projects)).to eq([@project]) expect(assigns(:already_added_projects)).to eq([@project])
expect(assigns(:repos)).to eq([@repo]) expect(assigns(:repos)).to eq([@repo])
expect(assigns(:incompatible_repos)).to eq([])
end end
it "does not show already added project" do it "does not show already added project" do
@project = create(:project, import_type: 'google_code', creator_id: user.id, import_source: 'vim') @project = create(:project, import_type: 'google_code', creator_id: user.id, import_source: 'vim')
controller.stub_chain(:client, :repos).and_return([@repo]) controller.stub_chain(:client, :repos).and_return([@repo])
controller.stub_chain(:client, :incompatible_repos).and_return([])
get :status get :status
expect(assigns(:already_added_projects)).to eq([@project]) expect(assigns(:already_added_projects)).to eq([@project])
expect(assigns(:repos)).to eq([]) expect(assigns(:repos)).to eq([])
end end
it "does not show any invalid projects" do
controller.stub_chain(:client, :repos).and_return([])
controller.stub_chain(:client, :incompatible_repos).and_return([@repo])
get :status
expect(assigns(:repos)).to be_empty
expect(assigns(:incompatible_repos)).to eq([@repo])
end
end end
end end
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
describe "#repos" do describe "#repos" do
it "returns only Git repositories" do it "returns only Git repositories" do
expect(subject.repos.length).to eq(1) expect(subject.repos.length).to eq(1)
expect(subject.incompatible_repos.length).to eq(1)
end end
end end
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment