diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /app/finders/environments_finder.rb | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) | |
download | gitlab-ce-9dc93a4519d9d5d7be48ff274127136236a3adb3.tar.gz |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'app/finders/environments_finder.rb')
-rw-r--r-- | app/finders/environments_finder.rb | 67 |
1 files changed, 4 insertions, 63 deletions
diff --git a/app/finders/environments_finder.rb b/app/finders/environments_finder.rb index 32ca1a42db7..c64e850f440 100644 --- a/app/finders/environments_finder.rb +++ b/app/finders/environments_finder.rb @@ -6,81 +6,22 @@ class EnvironmentsFinder InvalidStatesError = Class.new(StandardError) def initialize(project, current_user, params = {}) - @project, @current_user, @params = project, current_user, params + @project = project + @current_user = current_user + @params = params end - # rubocop: disable CodeReuse/ActiveRecord def execute - deployments = project.deployments - deployments = - if ref - deployments_query = params[:with_tags] ? 'ref = :ref OR tag IS TRUE' : 'ref = :ref' - deployments.where(deployments_query, ref: ref.to_s) - elsif commit - deployments.where(sha: commit.sha) - else - deployments.none - end - - environment_ids = deployments - .group(:environment_id) - .select(:environment_id) - - environments = project.environments.available - .where(id: environment_ids) - - if params[:find_latest] - find_one(environments.order_by_last_deployed_at_desc) - else - find_all(environments.order_by_last_deployed_at.to_a) - end - end - # rubocop: enable CodeReuse/ActiveRecord - - # This method will eventually take the place of `#execute` as an - # efficient way to get relevant environment entries. - # Currently, `#execute` method has a serious technical debt and - # we will likely rework on it in the future. - # See more https://gitlab.com/gitlab-org/gitlab-foss/issues/63381 - def find environments = project.environments environments = by_name(environments) environments = by_search(environments) # Raises InvalidStatesError if params[:states] contains invalid states. - environments = by_states(environments) - - environments + by_states(environments) end private - def find_one(environments) - [environments.find { |environment| valid_environment?(environment) }].compact - end - - def find_all(environments) - environments.select { |environment| valid_environment?(environment) } - end - - def valid_environment?(environment) - # Go in order of cost: SQL calls are cheaper than Gitaly calls - return false unless Ability.allowed?(current_user, :read_environment, environment) - - return false if ref && params[:recently_updated] && !environment.recently_updated_on_branch?(ref) - return false if ref && commit && !environment.includes_commit?(commit) - - true - end - - def ref - params[:ref].try(:to_s) - end - - def commit - params[:commit] - end - def by_name(environments) if params[:name].present? environments.for_name(params[:name]) |