summaryrefslogtreecommitdiff
path: root/app/controllers/projects/builds_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/projects/builds_controller.rb')
-rw-r--r--app/controllers/projects/builds_controller.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index f159e169f6d..269c0d3c21f 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -20,6 +20,30 @@ class Projects::BuildsController < Projects::ApplicationController
@builds = @builds.page(params[:page]).per(30)
end
+ def commits
+ @scope = params[:scope]
+ @all_commits = project.ci_commits
+ @commits = @all_commits.order(id: :desc)
+ @commits =
+ case @scope
+ when 'latest'
+ @commits
+ when 'branches'
+ refs = project.repository.branches.map(&:name)
+ ids = @all_commits.where(ref: refs).group(:ref).select('max(id)')
+ @commits.where(id: ids)
+ when 'tags'
+ refs = project.repository.tags.map(&:name)
+ ids = @all_commits.where(ref: refs).group(:ref).select('max(id)')
+ @commits.where(id: ids)
+ else
+ @commits
+ end
+ @commits = @commits.page(params[:page]).per(30)
+ end
+
+ private
+
def cancel_all
@project.builds.running_or_pending.each(&:cancel)
redirect_to namespace_project_builds_path(project.namespace, project)
@@ -68,6 +92,10 @@ class Projects::BuildsController < Projects::ApplicationController
@build ||= project.builds.unscoped.find_by!(id: params[:id])
end
+ def ci_commit
+ @ci_commit ||= project.ci_commits.find_by!(id: params[:id])
+ end
+
def build_path(build)
namespace_project_build_path(build.project.namespace, build.project, build)
end