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
This commit is contained in:
		
							parent
							
								
									39a55bdf1a
								
							
						
					
					
						commit
						9c76a6fa96
					
				| 
						 | 
				
			
			@ -19,7 +19,7 @@ v 7.11.0 (unreleased)
 | 
			
		|||
  - Include commit comments in MR from a forked project.
 | 
			
		||||
  - Fix adding new group members from admin area
 | 
			
		||||
  - 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 Slack service channel was not saved in admin template settings. (Stan Hu)
 | 
			
		||||
  - Move snippets UI to fluid layout
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,7 @@ class Import::GoogleCodeController < Import::BaseController
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    @repos = client.repos
 | 
			
		||||
    @incompatible_repos = client.incompatible_repos
 | 
			
		||||
 | 
			
		||||
    @already_added_projects = current_user.created_projects.where(import_type: "google_code")
 | 
			
		||||
    already_added_projects_names = @already_added_projects.pluck(:import_source)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,15 +2,19 @@
 | 
			
		|||
  %i.fa.fa-google
 | 
			
		||||
  Import projects from Google Code
 | 
			
		||||
 | 
			
		||||
%p.light
 | 
			
		||||
  Select projects you want to import.
 | 
			
		||||
%p.light
 | 
			
		||||
  Optionally, you can
 | 
			
		||||
  = link_to "customize", new_user_map_import_google_code_path
 | 
			
		||||
  how Google Code email addresses and usernames are imported into GitLab.
 | 
			
		||||
%hr
 | 
			
		||||
%p
 | 
			
		||||
  = button_tag 'Import all projects', class: "btn btn-success js-import-all"
 | 
			
		||||
- if @repos.any?
 | 
			
		||||
  %p.light
 | 
			
		||||
    Select projects you want to import.
 | 
			
		||||
  %p.light
 | 
			
		||||
    Optionally, you can
 | 
			
		||||
    = link_to "customize", new_user_map_import_google_code_path
 | 
			
		||||
    how Google Code email addresses and usernames are imported into GitLab.
 | 
			
		||||
  %hr
 | 
			
		||||
  %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
 | 
			
		||||
  %thead
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +48,22 @@
 | 
			
		|||
          = "#{current_user.username}/#{repo.name}"
 | 
			
		||||
        %td.import-actions.job-status
 | 
			
		||||
          = 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
 | 
			
		||||
  new ImporterStatus("#{jobs_import_google_code_path}", "#{import_google_code_path}")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,10 @@ module Gitlab
 | 
			
		|||
        @repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.select(&:git?)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def incompatible_repos
 | 
			
		||||
        @incompatible_repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.reject(&:git?)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def repo(id)
 | 
			
		||||
        repos.find { |repo| repo.id == id }
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,21 +27,34 @@ describe Import::GoogleCodeController do
 | 
			
		|||
    it "assigns variables" do
 | 
			
		||||
      @project = create(:project, import_type: 'google_code', creator_id: user.id)
 | 
			
		||||
      controller.stub_chain(:client, :repos).and_return([@repo])
 | 
			
		||||
      controller.stub_chain(:client, :incompatible_repos).and_return([])
 | 
			
		||||
 | 
			
		||||
      get :status
 | 
			
		||||
 | 
			
		||||
      expect(assigns(:already_added_projects)).to eq([@project])
 | 
			
		||||
      expect(assigns(:repos)).to eq([@repo])
 | 
			
		||||
      expect(assigns(:incompatible_repos)).to eq([])
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "does not show already added project" do
 | 
			
		||||
      @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, :incompatible_repos).and_return([])
 | 
			
		||||
 | 
			
		||||
      get :status
 | 
			
		||||
 | 
			
		||||
      expect(assigns(:already_added_projects)).to eq([@project])
 | 
			
		||||
      expect(assigns(:repos)).to eq([])
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ describe Gitlab::GoogleCodeImport::Client do
 | 
			
		|||
  describe "#repos" do
 | 
			
		||||
    it "returns only Git repositories" do
 | 
			
		||||
      expect(subject.repos.length).to eq(1)
 | 
			
		||||
      expect(subject.incompatible_repos.length).to eq(1)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue