Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 06:07:50 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 06:07:50 +0300
commit38bab6e1581d30c0e9d312474fd796404cc7b484 (patch)
treee4e6b11e2788cae577ecb1efa5195f9bc77b83f2 /lib
parent47b8f79a0896f406008d5a7eda2781f8da301e91 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/api/entities.rb6
-rw-r--r--lib/api/groups.rb2
-rw-r--r--lib/api/projects.rb34
-rw-r--r--lib/api/projects_batch_counting.rb27
-rw-r--r--lib/api/projects_relation_builder.rb36
5 files changed, 49 insertions, 56 deletions
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 8a60127ff59..6d33cb214ee 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -188,7 +188,7 @@ module API
end
class BasicProjectDetails < ProjectIdentity
- include ::API::ProjectsBatchCounting
+ include ::API::ProjectsRelationBuilder
expose :default_branch, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) }
# Avoids an N+1 query: https://github.com/mbleigh/acts-as-taggable-on/issues/91#issuecomment-168273770
@@ -430,7 +430,7 @@ module API
options: { only_owned: true, limit: projects_limit }
).execute
- Entities::Project.preload_and_batch_count!(projects)
+ Entities::Project.prepare_relation(projects)
end
expose :shared_projects, using: Entities::Project do |group, options|
@@ -440,7 +440,7 @@ module API
options: { only_shared: true, limit: projects_limit }
).execute
- Entities::Project.preload_and_batch_count!(projects)
+ Entities::Project.prepare_relation(projects)
end
def projects_limit
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index b9cfc16fb23..6c88b61eee8 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -231,7 +231,7 @@ module API
projects, options = with_custom_attributes(projects, options)
- present options[:with].preload_and_batch_count!(projects), options
+ present options[:with].prepare_relation(projects), options
end
desc 'Get a list of subgroups in this group.' do
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index ea7087d2f46..a1fce9e8b20 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -75,17 +75,15 @@ module API
mutually_exclusive :import_url, :template_name, :template_project_id
end
- def find_projects
+ def load_projects
ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute
end
- # Prepare the full projects query
- # None of this is supposed to actually execute any database query
- def prepare_query(projects)
+ def present_projects(projects, options = {})
projects = reorder_projects(projects)
projects = apply_filters(projects)
-
- projects, options = with_custom_attributes(projects)
+ projects = paginate(projects)
+ projects, options = with_custom_attributes(projects, options)
options = options.reverse_merge(
with: current_user ? Entities::ProjectWithAccess : Entities::BasicProjectDetails,
@@ -93,23 +91,9 @@ module API
current_user: current_user,
license: false
)
-
options[:with] = Entities::BasicProjectDetails if params[:simple]
- projects = options[:with].preload_relation(projects, options)
-
- [projects, options]
- end
-
- def prepare_and_present(project_relation)
- projects, options = prepare_query(project_relation)
-
- projects = paginate_and_retrieve!(projects)
-
- # Refresh count caches
- options[:with].execute_batch_counting(projects)
-
- present projects, options
+ present options[:with].prepare_relation(projects, options), options
end
def translate_params_for_compatibility(params)
@@ -134,7 +118,7 @@ module API
params[:user] = user
- prepare_and_present find_projects
+ present_projects load_projects
end
desc 'Get projects starred by a user' do
@@ -150,7 +134,7 @@ module API
not_found!('User') unless user
starred_projects = StarredProjectsFinder.new(user, params: project_finder_params, current_user: current_user).execute
- prepare_and_present starred_projects
+ present_projects starred_projects
end
end
@@ -166,7 +150,7 @@ module API
use :with_custom_attributes
end
get do
- prepare_and_present find_projects
+ present_projects load_projects
end
desc 'Create new project' do
@@ -303,7 +287,7 @@ module API
get ':id/forks' do
forks = ForkProjectsFinder.new(user_project, params: project_finder_params, current_user: current_user).execute
- prepare_and_present forks
+ present_projects forks
end
desc 'Check pages access of this project'
diff --git a/lib/api/projects_batch_counting.rb b/lib/api/projects_batch_counting.rb
deleted file mode 100644
index 4e5124c8791..00000000000
--- a/lib/api/projects_batch_counting.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-module API
- module ProjectsBatchCounting
- extend ActiveSupport::Concern
-
- class_methods do
- # This adds preloading to the query and executes batch counting
- # Side-effect: The query will be executed during batch counting
- def preload_and_batch_count!(projects_relation)
- preload_relation(projects_relation).tap do |projects|
- execute_batch_counting(projects)
- end
- end
-
- def execute_batch_counting(projects)
- ::Projects::BatchForksCountService.new(forks_counting_projects(projects)).refresh_cache
-
- ::Projects::BatchOpenIssuesCountService.new(projects).refresh_cache
- end
-
- def forks_counting_projects(projects)
- projects
- end
- end
- end
-end
diff --git a/lib/api/projects_relation_builder.rb b/lib/api/projects_relation_builder.rb
new file mode 100644
index 00000000000..263468c9aa6
--- /dev/null
+++ b/lib/api/projects_relation_builder.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module API
+ module ProjectsRelationBuilder
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def prepare_relation(projects_relation, options = {})
+ projects_relation = preload_relation(projects_relation, options)
+ execute_batch_counting(projects_relation)
+ projects_relation
+ end
+
+ def preload_relation(projects_relation, options = {})
+ projects_relation
+ end
+
+ def forks_counting_projects(projects_relation)
+ projects_relation
+ end
+
+ def batch_forks_counting(projects_relation)
+ ::Projects::BatchForksCountService.new(forks_counting_projects(projects_relation)).refresh_cache
+ end
+
+ def batch_open_issues_counting(projects_relation)
+ ::Projects::BatchOpenIssuesCountService.new(projects_relation).refresh_cache
+ end
+
+ def execute_batch_counting(projects_relation)
+ batch_forks_counting(projects_relation)
+ batch_open_issues_counting(projects_relation)
+ end
+ end
+ end
+end