summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2017-05-23 21:20:59 +0800
committerLin Jen-Shin <godfat@godfat.org>2017-05-23 21:20:59 +0800
commit43981250c426595c9b3c03a5153ae05d3de2a8e2 (patch)
tree586f0656915e21d5c73239cfec7e5ac582856326
parent876acc7e0d654ebc89df3c596cc504334a37f7d8 (diff)
downloadgitlab-ce-43981250c426595c9b3c03a5153ae05d3de2a8e2.tar.gz
Use controllers to redirect
-rw-r--r--app/controllers/projects/build_artifacts_controller.rb49
-rw-r--r--app/controllers/projects/builds_controller.rb27
-rw-r--r--lib/gitlab/routes/legacy_builds.rb68
3 files changed, 100 insertions, 44 deletions
diff --git a/app/controllers/projects/build_artifacts_controller.rb b/app/controllers/projects/build_artifacts_controller.rb
new file mode 100644
index 00000000000..873246f484e
--- /dev/null
+++ b/app/controllers/projects/build_artifacts_controller.rb
@@ -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
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
new file mode 100644
index 00000000000..013797a7313
--- /dev/null
+++ b/app/controllers/projects/builds_controller.rb
@@ -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
diff --git a/lib/gitlab/routes/legacy_builds.rb b/lib/gitlab/routes/legacy_builds.rb
index 2ae6a93981b..cbb8b960c7e 100644
--- a/lib/gitlab/routes/legacy_builds.rb
+++ b/lib/gitlab/routes/legacy_builds.rb
@@ -1,4 +1,3 @@
-
module Gitlab
module Routes
class LegacyBuilds
@@ -10,52 +9,33 @@ module Gitlab
end
def draw
- redirect_artifacts = @map.redirect(&method(:redirect_artifacts))
- redirect_builds = @map.redirect(&method(:redirect_builds))
-
- @map.get '/builds(/:id)/artifacts/*action', to: redirect_artifacts,
- as: 'legacy_artifacts',
- format: false
-
- @map.get '/builds(/:id(/*action))', to: redirect_builds,
- as: 'legacy_builds',
- format: false
- end
-
- private
-
- 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)
+ @map.instance_eval do
+ 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
+
+ member do
+ get :status
+ get :trace, defaults: { format: 'json' }
+ get :raw
+ end
+
+ resource :artifacts, only: [], controller: 'build_artifacts' do
+ get :download
+ get :browse, path: 'browse(/*path)', format: false
+ get :file, path: 'file/*path', format: false
+ get :raw, path: 'raw/*path', format: false
+ end
end
- else # index
- namespace_project_jobs_path(*args)
end
end
-
- def fake_project(namespace_id, project_id)
- Struct.new(:namespace, :to_param).new(namespace_id, project_id)
- end
end
end
end