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/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2024-01-15 18:08:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2024-01-15 18:08:13 +0300
commita29eae68f453c371271641899e00ea24339fb1c6 (patch)
tree5c7d43159cdaee44d3f510db0f42941ed3f3bb90 /app
parentf58a5001b9c4988d8b95178b028a3d82bb346e28 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue9
-rw-r--r--app/finders/ci/runners_finder.rb144
-rw-r--r--app/models/merge_request_diff.rb17
-rw-r--r--app/services/import/github_service.rb21
5 files changed, 116 insertions, 77 deletions
diff --git a/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue b/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue
index 343b555c4d8..ccef50e469d 100644
--- a/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue
+++ b/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue
@@ -50,6 +50,6 @@ export default {
<template>
<div>
<gl-loading-icon v-if="isLoading" class="gl-mt-5" size="lg" />
- <div v-else v-safe-html="readmeHtml"></div>
+ <div v-else v-safe-html="readmeHtml" class="md"></div>
</div>
</template>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue b/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue
index 7413e2237c3..afdb9e9ff08 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue
@@ -72,6 +72,11 @@ export default {
return this.actionButtons.length > 0;
},
},
+ methods: {
+ hasHeader() {
+ return Boolean(this.$scopedSlots.header || this.header || this.shouldShowHeaderActions);
+ },
+ },
i18n: {
learnMore: __('Learn more'),
},
@@ -91,9 +96,9 @@ export default {
:icon-name="statusIconName"
/>
<div class="gl-w-full gl-min-w-0">
- <div class="gl-display-flex">
+ <div v-if="hasHeader()" class="gl-display-flex">
<slot name="header">
- <div v-if="header" class="gl-mb-2">
+ <div class="gl-mb-2">
<strong v-safe-html="generatedHeader" class="gl-display-block"></strong
><span
v-if="generatedSubheader"
diff --git a/app/finders/ci/runners_finder.rb b/app/finders/ci/runners_finder.rb
index 88402748083..18be2aec2e2 100644
--- a/app/finders/ci/runners_finder.rb
+++ b/app/finders/ci/runners_finder.rb
@@ -14,18 +14,25 @@ module Ci
end
def execute
- search!
- filter_by_active!
- filter_by_status!
- filter_by_upgrade_status!
- filter_by_runner_type!
- filter_by_tag_list!
- filter_by_creator_id!
- filter_by_version_prefix!
- sort!
- request_tag_list!
-
- @runners
+ items = if @project
+ project_runners
+ elsif @group
+ group_runners
+ else
+ all_runners
+ end
+
+ items = search(items)
+ items = by_active(items)
+ items = by_status(items)
+ items = by_upgrade_status(items)
+ items = by_runner_type(items)
+ items = by_tag_list(items)
+ items = by_creator_id(items)
+ items = by_version_prefix(items)
+ items = request_tag_list(items)
+
+ sort(items)
end
def sort_key
@@ -40,105 +47,104 @@ module Ci
%w[contacted_asc contacted_desc created_at_asc created_at_desc created_date token_expires_at_asc token_expires_at_desc]
end
- def search!
- if @project
- project_runners
- elsif @group
- group_runners
- else
- all_runners
- end
-
- @runners = @runners.search(@params[:search]) if @params[:search].present?
- end
-
def all_runners
raise Gitlab::Access::AccessDeniedError unless @current_user&.can_admin_all_resources?
- @runners = Ci::Runner.all
+ Ci::Runner.all
end
def group_runners
raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_group_runners, @group)
- @runners = case @params[:membership]
- when :direct
- Ci::Runner.belonging_to_group(@group.id)
- when :descendants, nil
- Ci::Runner.belonging_to_group_or_project_descendants(@group.id)
- when :all_available
- unless can?(@current_user, :read_group_all_available_runners, @group)
- raise Gitlab::Access::AccessDeniedError
- end
-
- Ci::Runner.usable_from_scope(@group)
- else
- raise ArgumentError, 'Invalid membership filter'
- end
+ case @params[:membership]
+ when :direct
+ Ci::Runner.belonging_to_group(@group.id)
+ when :descendants, nil
+ Ci::Runner.belonging_to_group_or_project_descendants(@group.id)
+ when :all_available
+ unless can?(@current_user, :read_group_all_available_runners, @group)
+ raise Gitlab::Access::AccessDeniedError
+ end
+
+ Ci::Runner.usable_from_scope(@group)
+ else
+ raise ArgumentError, 'Invalid membership filter'
+ end
end
def project_runners
raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_project_runners, @project)
- @runners = ::Ci::Runner.owned_or_instance_wide(@project.id)
+ ::Ci::Runner.owned_or_instance_wide(@project.id)
end
- def filter_by_active!
- @runners = @runners.active(@params[:active]) if @params.include?(:active)
+ def search(items)
+ return items unless @params[:search].present?
+
+ items.search(@params[:search])
end
- def filter_by_status!
- @runners = @runners.with_status(@params[:status_status]) if @params[:status_status].present?
+ def by_active(items)
+ return items if @params.exclude?(:active)
+
+ items.active(@params[:active])
end
- def filter_by_upgrade_status!
+ def by_status(items)
+ status = @params[:status_status].presence
+ return items unless status
+
+ items.with_status(status)
+ end
+
+ def by_upgrade_status(items)
upgrade_status = @params[:upgrade_status]
- return unless upgrade_status
+ return items unless upgrade_status
unless Ci::RunnerVersion.statuses.key?(upgrade_status)
raise ArgumentError, "Invalid upgrade status value '#{upgrade_status}'"
end
- @runners = @runners.with_upgrade_status(upgrade_status)
+ items.with_upgrade_status(upgrade_status)
end
- def filter_by_runner_type!
- runner_type = @params[:type_type]
- return if runner_type.blank?
+ def by_runner_type(items)
+ runner_type = @params[:type_type].presence
+ return items unless runner_type
- @runners = @runners.with_runner_type(runner_type)
+ items.with_runner_type(runner_type)
end
- def filter_by_tag_list!
+ def by_tag_list(items)
tag_list = @params[:tag_name].presence
+ return items unless tag_list
- if tag_list
- @runners = @runners.tagged_with(tag_list)
- end
+ items.tagged_with(tag_list)
end
- def filter_by_creator_id!
- creator_id = @params[:creator_id]
- @runners = @runners.with_creator_id(creator_id) if creator_id.present?
- end
-
- def filter_by_version_prefix!
- return @runners unless @params[:version_prefix]
+ def by_creator_id(items)
+ creator_id = @params[:creator_id].presence
+ return items unless creator_id
- sanitized_prefix = @params[:version_prefix][/^[\d+.]+/]
+ items.with_creator_id(creator_id)
+ end
- return @runners unless sanitized_prefix
+ def by_version_prefix(items)
+ sanitized_prefix = @params.fetch(:version_prefix, '')[/^[\d+.]+/]
+ return items unless sanitized_prefix
- @runners = @runners.with_version_prefix(sanitized_prefix)
+ items.with_version_prefix(sanitized_prefix)
end
- def sort!
- @runners = @runners.order_by(sort_key)
+ def sort(items)
+ items.order_by(sort_key)
end
- def request_tag_list!
- @runners = @runners.with_tags if @params.exclude?(:preload) || @params.dig(:preload, :tag_name)
+ def request_tag_list(items)
+ return items if @params.include?(:preload) && !@params.dig(:preload, :tag_name) # Backward-compatible behavior
+
+ items.with_tags
end
end
end
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index f1ce4738015..47102418152 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -461,18 +461,25 @@ class MergeRequestDiff < ApplicationRecord
fetching_repository_diffs({}) do |comparison|
reorder_diff_files!
+ collapse_generated = Feature.enabled?(:collapse_generated_diff_files, project)
+ diff_options = { collapse_generated: collapse_generated }
+
collection = Gitlab::Diff::FileCollection::PaginatedMergeRequestDiff.new(
self,
page,
- per_page
+ per_page,
+ diff_options
)
if comparison
+ diff_options[:generated_files] = comparison.generated_files if collapse_generated
+
comparison.diffs(
- paths: collection.diff_paths,
- page: collection.current_page,
- per_page: collection.limit_value,
- count: collection.total_count
+ diff_options.merge(
+ paths: collection.diff_paths,
+ page: collection.current_page,
+ per_page: collection.limit_value,
+ count: collection.total_count)
)
else
collection
diff --git a/app/services/import/github_service.rb b/app/services/import/github_service.rb
index b8389192b18..ffd26e2aaca 100644
--- a/app/services/import/github_service.rb
+++ b/app/services/import/github_service.rb
@@ -5,6 +5,8 @@ module Import
include ActiveSupport::NumberHelper
include Gitlab::Utils::StrongMemoize
+ COLLAB_IMPORT_SCOPES = %w[admin:org read:org].freeze
+
attr_accessor :client
attr_reader :params, :current_user
@@ -12,6 +14,9 @@ module Import
context_error = validate_context
return context_error if context_error
+ scope_error = validate_collaborators_import_scope
+ return scope_error if scope_error
+
project = create_project(access_params, provider)
track_access_level('github')
@@ -98,6 +103,22 @@ module Import
private
+ def validate_collaborators_import_scope
+ collaborators_import = params.dig(:optional_stages, :collaborators_import)
+ # A value for `collaborators_import` may not be included in POST params
+ # and the default value is `true`
+ return unless collaborators_import == true || collaborators_import.nil?
+
+ # We need to call `#repo` to ensure the `#last_response` from the client has the headers we need.
+ repo
+ scopes = client.octokit.last_response.headers["x-oauth-scopes"]
+ scopes = scopes.split(',').map(&:strip)
+
+ return if (scopes & COLLAB_IMPORT_SCOPES).any?
+
+ log_and_return_error('Invalid scope', _('Your GitHub access token does not have the correct scope to import collaborators.'), :unprocessable_entity)
+ end
+
def validate_context
if blocked_url?
log_and_return_error("Invalid URL: #{url}", _("Invalid URL: %{url}") % { url: url }, :bad_request)