diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-09-17 10:52:49 +0000 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-09-18 10:21:32 +0200 |
commit | fe746e13fbf6e125c04c4af0e5235cbfa584ea3e (patch) | |
tree | 0a736117d4aa3b06019162489978f4b90371cb97 | |
parent | d6233127329ee97e90a9da2487c85069f7e51ea3 (diff) | |
download | gitlab-ce-fe746e13fbf6e125c04c4af0e5235cbfa584ea3e.tar.gz |
Merge branch '50944-unable-to-import-repository-undefined-method-import_file-for-nil-nilclass' into 'master'11-3-stable-prepare-rc10
Resolve "Unable to import repository: undefined method `import_file' for nil:NilClass"
Closes #50944
See merge request gitlab-org/gitlab-ce!21765
5 files changed, 15 insertions, 4 deletions
diff --git a/app/controllers/import/gitlab_projects_controller.rb b/app/controllers/import/gitlab_projects_controller.rb index f22df992fe9..f21c38a4c27 100644 --- a/app/controllers/import/gitlab_projects_controller.rb +++ b/app/controllers/import/gitlab_projects_controller.rb @@ -11,7 +11,7 @@ class Import::GitlabProjectsController < Import::BaseController def create unless file_is_valid? - return redirect_back_or_default(options: { alert: "You need to upload a GitLab project export archive." }) + return redirect_back_or_default(options: { alert: "You need to upload a GitLab project export archive (ending in .gz)." }) end @project = ::Projects::GitlabProjectsImportService.new(current_user, project_params).execute @@ -29,7 +29,11 @@ class Import::GitlabProjectsController < Import::BaseController private def file_is_valid? - project_params[:file] && project_params[:file].respond_to?(:read) + return false unless project_params[:file] && project_params[:file].respond_to?(:read) + + filename = project_params[:file].original_filename + + ImportExportUploader::EXTENSION_WHITELIST.include?(File.extname(filename).delete('.')) end def verify_gitlab_project_import_enabled diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 98076791ab9..e40f3dab882 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -192,7 +192,7 @@ class ProjectsController < Projects::ApplicationController def download_export if @project.export_file_exists? - send_upload(@project.export_file) + send_upload(@project.export_file, attachment: @project.export_file.filename) else redirect_to( edit_project_path(@project, anchor: 'js-export-project'), diff --git a/changelogs/unreleased/50944-unable-to-import-repository-undefined-method-import_file-for-nil-nilclass.yml b/changelogs/unreleased/50944-unable-to-import-repository-undefined-method-import_file-for-nil-nilclass.yml new file mode 100644 index 00000000000..ac18565090a --- /dev/null +++ b/changelogs/unreleased/50944-unable-to-import-repository-undefined-method-import_file-for-nil-nilclass.yml @@ -0,0 +1,5 @@ +--- +title: Fix import error when archive does not have the correct extension +merge_request: 21765 +author: +type: fixed diff --git a/spec/controllers/import/gitlab_projects_controller_spec.rb b/spec/controllers/import/gitlab_projects_controller_spec.rb index d624659bce9..cbd1a112602 100644 --- a/spec/controllers/import/gitlab_projects_controller_spec.rb +++ b/spec/controllers/import/gitlab_projects_controller_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Import::GitlabProjectsController do set(:namespace) { create(:namespace) } set(:user) { namespace.owner } - let(:file) { fixture_file_upload('spec/fixtures/doc_sample.txt', 'text/plain') } + let(:file) { fixture_file_upload('spec/fixtures/project_export.tar.gz', 'text/plain') } before do sign_in(user) diff --git a/spec/features/projects/import_export/export_file_spec.rb b/spec/features/projects/import_export/export_file_spec.rb index 8a418356541..a2b96514d64 100644 --- a/spec/features/projects/import_export/export_file_spec.rb +++ b/spec/features/projects/import_export/export_file_spec.rb @@ -49,6 +49,8 @@ describe 'Import/Export - project export integration test', :js do expect(file_permissions(project.export_path)).to eq(0700) + expect(project.export_file.path).to include('tar.gz') + in_directory_with_expanded_export(project) do |exit_status, tmpdir| expect(exit_status).to eq(0) |