Use controllers to redirect
This commit is contained in:
parent
876acc7e0d
commit
43981250c4
|
@ -0,0 +1,49 @@
|
||||||
|
class Projects::BuildArtifactsController < Projects::ApplicationController
|
||||||
|
include ExtractsPath
|
||||||
|
include RendersBlob
|
||||||
|
|
||||||
|
before_action :extract_ref_name_and_path
|
||||||
|
|
||||||
|
def download
|
||||||
|
redirect_to download_namespace_project_job_artifacts_path(project.namespace, project, job)
|
||||||
|
end
|
||||||
|
|
||||||
|
def browse
|
||||||
|
redirect_to browse_namespace_project_job_artifacts_path(project.namespace, project, job, path: params[:path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def file
|
||||||
|
redirect_to file_namespace_project_job_artifacts_path(project.namespace, project, job, path: params[:path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def raw
|
||||||
|
redirect_to raw_namespace_project_job_artifacts_path(project.namespace, project, job, path: params[:path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def latest_succeeded
|
||||||
|
redirect_to latest_succeeded_namespace_project_artifacts_path(project.namespace, project, job, ref_name_and_path: params[:ref_name_and_path], job: params[:job])
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def extract_ref_name_and_path
|
||||||
|
return unless params[:ref_name_and_path]
|
||||||
|
|
||||||
|
@ref_name, @path = extract_ref(params[:ref_name_and_path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def job
|
||||||
|
@job ||= job_from_id || job_from_ref
|
||||||
|
end
|
||||||
|
|
||||||
|
def job_from_id
|
||||||
|
project.builds.find_by(id: params[:build_id]) if params[:build_id]
|
||||||
|
end
|
||||||
|
|
||||||
|
def job_from_ref
|
||||||
|
return unless @ref_name
|
||||||
|
|
||||||
|
jobs = project.latest_successful_builds_for(@ref_name)
|
||||||
|
jobs.find_by(name: params[:job])
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,27 @@
|
||||||
|
class Projects::BuildsController < Projects::ApplicationController
|
||||||
|
def index
|
||||||
|
redirect_to namespace_project_jobs_path(project.namespace, project)
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
redirect_to namespace_project_job_path(project.namespace, project, job)
|
||||||
|
end
|
||||||
|
|
||||||
|
def trace
|
||||||
|
redirect_to trace_namespace_project_job_path(project.namespace, project, job, format: params[:format])
|
||||||
|
end
|
||||||
|
|
||||||
|
def status
|
||||||
|
redirect_to status_namespace_project_job_path(project.namespace, project, job, format: params[:format])
|
||||||
|
end
|
||||||
|
|
||||||
|
def raw
|
||||||
|
redirect_to raw_namespace_project_job_path(project.namespace, project, job)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def job
|
||||||
|
@job ||= project.builds.find(params[:id])
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
module Gitlab
|
module Gitlab
|
||||||
module Routes
|
module Routes
|
||||||
class LegacyBuilds
|
class LegacyBuilds
|
||||||
|
@ -10,52 +9,33 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def draw
|
def draw
|
||||||
redirect_artifacts = @map.redirect(&method(:redirect_artifacts))
|
@map.instance_eval do
|
||||||
redirect_builds = @map.redirect(&method(:redirect_builds))
|
resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do
|
||||||
|
collection do
|
||||||
|
resources :artifacts, only: [], controller: 'build_artifacts' do
|
||||||
|
collection do
|
||||||
|
get :latest_succeeded,
|
||||||
|
path: '*ref_name_and_path',
|
||||||
|
format: false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@map.get '/builds(/:id)/artifacts/*action', to: redirect_artifacts,
|
member do
|
||||||
as: 'legacy_artifacts',
|
get :status
|
||||||
format: false
|
get :trace, defaults: { format: 'json' }
|
||||||
|
get :raw
|
||||||
|
end
|
||||||
|
|
||||||
@map.get '/builds(/:id(/*action))', to: redirect_builds,
|
resource :artifacts, only: [], controller: 'build_artifacts' do
|
||||||
as: 'legacy_builds',
|
get :download
|
||||||
format: false
|
get :browse, path: 'browse(/*path)', format: false
|
||||||
end
|
get :file, path: 'file/*path', format: false
|
||||||
|
get :raw, path: 'raw/*path', format: false
|
||||||
private
|
end
|
||||||
|
|
||||||
def redirect_artifacts(params, req)
|
|
||||||
if params[:id]
|
|
||||||
project = fake_project(*params.values_at(:namespace_id, :project_id))
|
|
||||||
|
|
||||||
artifacts_action_path(params[:action], project, params[:id])
|
|
||||||
else
|
|
||||||
latest_succeeded_namespace_project_artifacts_path(params[:namespace_id], params[:project_id], params[:action], job: req.GET[:job])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def redirect_builds(params, req)
|
|
||||||
args = params.values_at(:namespace_id, :project_id, :id).compact
|
|
||||||
|
|
||||||
if params[:id]
|
|
||||||
case params[:action]
|
|
||||||
when 'status'
|
|
||||||
status_namespace_project_job_path(*args, format: params[:format])
|
|
||||||
when 'trace'
|
|
||||||
trace_namespace_project_job_path(*args, format: params[:format])
|
|
||||||
when 'raw'
|
|
||||||
raw_namespace_project_job_path(*args)
|
|
||||||
else # show
|
|
||||||
namespace_project_job_path(*args)
|
|
||||||
end
|
end
|
||||||
else # index
|
|
||||||
namespace_project_jobs_path(*args)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fake_project(namespace_id, project_id)
|
|
||||||
Struct.new(:namespace, :to_param).new(namespace_id, project_id)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue