diff options
-rw-r--r-- | app/controllers/projects/repositories_controller.rb | 9 | ||||
-rw-r--r-- | spec/controllers/projects/repositories_controller_spec.rb | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/app/controllers/projects/repositories_controller.rb b/app/controllers/projects/repositories_controller.rb index a6167e9dc6c..937b0e39cbd 100644 --- a/app/controllers/projects/repositories_controller.rb +++ b/app/controllers/projects/repositories_controller.rb @@ -16,8 +16,10 @@ class Projects::RepositoriesController < Projects::ApplicationController def archive append_sha = params[:append_sha] - shortname = "#{@project.path}-#{@ref.tr('/', '-')}" - append_sha = false if @filename == shortname + if @ref + shortname = "#{@project.path}-#{@ref.tr('/', '-')}" + append_sha = false if @filename == shortname + end send_git_archive @repository, ref: @ref, format: params[:format], append_sha: append_sha rescue => ex @@ -27,6 +29,9 @@ class Projects::RepositoriesController < Projects::ApplicationController def assign_archive_vars @id = params[:id] + + return unless @id + @ref, @filename = extract_ref(@id) rescue InvalidPathError render_404 diff --git a/spec/controllers/projects/repositories_controller_spec.rb b/spec/controllers/projects/repositories_controller_spec.rb index 31b1b52fdd1..c3b71458e38 100644 --- a/spec/controllers/projects/repositories_controller_spec.rb +++ b/spec/controllers/projects/repositories_controller_spec.rb @@ -34,6 +34,12 @@ describe Projects::RepositoriesController do expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-archive:") end + it 'handles legacy queries with no ref' do + get :archive, namespace_id: project.namespace, project_id: project, format: "zip" + + expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-archive:") + end + context "when the service raises an error" do before do allow(Gitlab::Workhorse).to receive(:send_git_archive).and_raise("Archive failed") |