diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-19 15:57:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-19 15:57:54 +0300 |
commit | 419c53ec62de6e97a517abd5fdd4cbde3a942a34 (patch) | |
tree | 1f43a548b46bca8a5fb8fe0c31cef1883d49c5b6 /app/finders | |
parent | 1da20d9135b3ad9e75e65b028bffc921aaf8deb7 (diff) |
Add latest changes from gitlab-org/gitlab@16-5-stable-eev16.5.0-rc42
Diffstat (limited to 'app/finders')
-rw-r--r-- | app/finders/concerns/packages/finder_helper.rb | 4 | ||||
-rw-r--r-- | app/finders/merge_requests/oldest_per_commit_finder.rb | 14 | ||||
-rw-r--r-- | app/finders/packages/maven/package_finder.rb | 6 | ||||
-rw-r--r-- | app/finders/packages/npm/packages_for_user_finder.rb | 7 | ||||
-rw-r--r-- | app/finders/projects/ml/model_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/projects_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/snippets_finder.rb | 14 | ||||
-rw-r--r-- | app/finders/vs_code/settings/settings_finder.rb | 23 |
8 files changed, 56 insertions, 16 deletions
diff --git a/app/finders/concerns/packages/finder_helper.rb b/app/finders/concerns/packages/finder_helper.rb index 0ae99782cd3..585b35981a6 100644 --- a/app/finders/concerns/packages/finder_helper.rb +++ b/app/finders/concerns/packages/finder_helper.rb @@ -13,11 +13,13 @@ module Packages project.packages.installable end - def packages_visible_to_user(user, within_group:) + def packages_visible_to_user(user, within_group:, with_package_registry_enabled: false) return ::Packages::Package.none unless within_group return ::Packages::Package.none unless Ability.allowed?(user, :read_group, within_group) projects = projects_visible_to_reporters(user, within_group: within_group) + projects = projects.with_package_registry_enabled if with_package_registry_enabled + ::Packages::Package.for_projects(projects.select(:id)).installable end diff --git a/app/finders/merge_requests/oldest_per_commit_finder.rb b/app/finders/merge_requests/oldest_per_commit_finder.rb index 5da7a08e36c..16b5964e242 100644 --- a/app/finders/merge_requests/oldest_per_commit_finder.rb +++ b/app/finders/merge_requests/oldest_per_commit_finder.rb @@ -18,8 +18,8 @@ module MergeRequests mapping = {} shas = commits.map(&:id) - # To include merge requests by the merge/squash SHA, we don't need to go - # through any diff rows. + # To include merge requests by the merged/merge/squash SHA, we don't need + # to go through any diff rows. # # We can't squeeze all this into a single query, as the diff based data # relies on a GROUP BY. On the other hand, retrieving MRs by their merge @@ -27,17 +27,19 @@ module MergeRequests @project .merge_requests .preload_target_project - .by_merge_or_squash_commit_sha(shas) + .by_merged_or_merge_or_squash_commit_sha(shas) .each do |mr| - # Merge/squash SHAs can't be in the merge request itself. It _is_ - # possible a newer merge request includes the commit, but in that case - # we still want the oldest merge request. + # SHAs for merge commits, squash commits, and rebased source SHAs, + # can't be in the merge request source branch. It _is_ possible a + # newer merge request includes the commit, but in that case we still + # want the oldest merge request. # # It's also possible that a merge request produces both a squashed # commit and a merge commit. In that case we want to store the mapping # for both the SHAs. mapping[mr.squash_commit_sha] = mr if mr.squash_commit_sha mapping[mr.merge_commit_sha] = mr if mr.merge_commit_sha + mapping[mr.merged_commit_sha] = mr if mr.merged_commit_sha end remaining = shas - mapping.keys diff --git a/app/finders/packages/maven/package_finder.rb b/app/finders/packages/maven/package_finder.rb index cc28d951f52..03855afb6e4 100644 --- a/app/finders/packages/maven/package_finder.rb +++ b/app/finders/packages/maven/package_finder.rb @@ -4,11 +4,7 @@ module Packages module Maven class PackageFinder < ::Packages::GroupOrProjectPackageFinder def execute - packages.last - end - - def execute! - packages.last! + packages end private diff --git a/app/finders/packages/npm/packages_for_user_finder.rb b/app/finders/packages/npm/packages_for_user_finder.rb index f42e49f9184..dc1d3b6e7fe 100644 --- a/app/finders/packages/npm/packages_for_user_finder.rb +++ b/app/finders/packages/npm/packages_for_user_finder.rb @@ -3,6 +3,8 @@ module Packages module Npm class PackagesForUserFinder < ::Packages::GroupOrProjectPackageFinder + extend ::Gitlab::Utils::Override + def execute packages end @@ -13,6 +15,11 @@ module Packages base.npm .with_name(@params[:package_name]) end + + override :group_packages + def group_packages + packages_visible_to_user(@current_user, within_group: @project_or_group, with_package_registry_enabled: true) + end end end end diff --git a/app/finders/projects/ml/model_finder.rb b/app/finders/projects/ml/model_finder.rb index 99c66f53de7..1e407ba4aa4 100644 --- a/app/finders/projects/ml/model_finder.rb +++ b/app/finders/projects/ml/model_finder.rb @@ -11,7 +11,7 @@ module Projects ::Ml::Model .by_project(@project) .including_latest_version - .limit(100) # This is a temporary limit before we add pagination + .with_version_count end end end diff --git a/app/finders/projects_finder.rb b/app/finders/projects_finder.rb index e6ee4355fd4..87edf36d1ce 100644 --- a/app/finders/projects_finder.rb +++ b/app/finders/projects_finder.rb @@ -61,7 +61,7 @@ class ProjectsFinder < UnionFinder collection = Project.wrap_with_cte(collection) if use_cte collection = filter_projects(collection) - sort(collection) + sort(collection).allow_cross_joins_across_databases(url: "https://gitlab.com/gitlab-org/gitlab/-/issues/427628") end private diff --git a/app/finders/snippets_finder.rb b/app/finders/snippets_finder.rb index cb824aca33f..e09de1f6612 100644 --- a/app/finders/snippets_finder.rb +++ b/app/finders/snippets_finder.rb @@ -42,6 +42,7 @@ class SnippetsFinder < UnionFinder include FinderMethods include Gitlab::Utils::StrongMemoize include CreatedAtFilter + include Gitlab::Allowable attr_reader :current_user, :params @@ -79,6 +80,7 @@ class SnippetsFinder < UnionFinder snippets = all_snippets snippets = by_ids(snippets) snippets = snippets.with_optional_visibility(visibility_from_scope) + snippets = hide_created_by_banned_user(snippets) end by_created_at(snippets) @@ -87,7 +89,7 @@ class SnippetsFinder < UnionFinder def return_all_available_and_permited? # Currently limited to access_levels `admin` and `auditor` # See policies/base_policy.rb files for specifics. - params[:all_available] && current_user&.can_read_all_resources? + params[:all_available] && can?(current_user, :read_all_resources) end def all_snippets @@ -126,7 +128,7 @@ class SnippetsFinder < UnionFinder queries = [] queries << personal_snippets unless only_project? - if Ability.allowed?(current_user, :read_cross_project) + if can?(current_user, :read_cross_project) queries << snippets_of_visible_projects queries << snippets_of_authorized_projects if current_user end @@ -207,6 +209,14 @@ class SnippetsFinder < UnionFinder snippets.id_in(params[:ids]) end + def hide_created_by_banned_user(snippets) + # if admin -> return all snippets, if not-admin -> filter out snippets by banned user + return snippets if can?(current_user, :read_all_resources) + return snippets unless Feature.enabled?(:hide_snippets_of_banned_users) + + snippets.without_created_by_banned_user + end + def author strong_memoize(:author) do next unless params[:author].present? diff --git a/app/finders/vs_code/settings/settings_finder.rb b/app/finders/vs_code/settings/settings_finder.rb new file mode 100644 index 00000000000..459ccdbe566 --- /dev/null +++ b/app/finders/vs_code/settings/settings_finder.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module VsCode + module Settings + class SettingsFinder + def initialize(current_user, setting_types) + @current_user = current_user + @setting_types = setting_types + end + + def execute + relation = User.find(current_user.id).vscode_settings + return relation unless setting_types.present? + + relation.by_setting_type(setting_types) + end + + private + + attr_accessor :current_user, :setting_types + end + end +end |