diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-12-19 14:01:45 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-12-19 14:01:45 +0300 |
commit | 9297025d0b7ddf095eb618dfaaab2ff8f2018d8b (patch) | |
tree | 865198c01d1824a9b098127baa3ab980c9cd2c06 /app/controllers/projects | |
parent | 6372471f43ee03c05a7c1f8b0c6ac6b8a7431dbe (diff) |
Add latest changes from gitlab-org/gitlab@16-7-stable-eev16.7.0-rc42
Diffstat (limited to 'app/controllers/projects')
22 files changed, 288 insertions, 84 deletions
diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb index 60c8fe97e81..ff3484d3020 100644 --- a/app/controllers/projects/autocomplete_sources_controller.rb +++ b/app/controllers/projects/autocomplete_sources_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Projects::AutocompleteSourcesController < Projects::ApplicationController + include AutocompleteSources::ExpiresIn + before_action :authorize_read_milestone!, only: :milestones before_action :authorize_read_crm_contact!, only: :contacts @@ -13,11 +15,6 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController urgency :low, [:issues, :labels, :milestones, :commands, :contacts] def members - if Feature.enabled?(:cache_autocomplete_sources_members, current_user) - # Cache the response on the frontend - expires_in 3.minutes - end - render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target) end diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 7371902a6bd..7851e2ac80b 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -52,6 +52,7 @@ class Projects::BlobController < Projects::ApplicationController push_frontend_feature_flag(:blob_blame_info, @project) push_frontend_feature_flag(:highlight_js_worker, @project) push_frontend_feature_flag(:explain_code_chat, current_user) + push_frontend_feature_flag(:encoding_logs_tree) push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks) end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 84872d1e978..fd853b5aaed 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -8,6 +8,7 @@ class Projects::BoardsController < Projects::ApplicationController before_action do push_frontend_feature_flag(:board_multi_select, project) push_frontend_feature_flag(:apollo_boards, project) + push_frontend_feature_flag(:display_work_item_epic_issue_sidebar, project) experiment(:prominent_create_board_btn, subject: current_user) do |e| e.control {} e.candidate {} diff --git a/app/controllers/projects/ci/pipeline_editor_controller.rb b/app/controllers/projects/ci/pipeline_editor_controller.rb index 6e7f764c5c1..62a5baccc62 100644 --- a/app/controllers/projects/ci/pipeline_editor_controller.rb +++ b/app/controllers/projects/ci/pipeline_editor_controller.rb @@ -4,7 +4,6 @@ class Projects::Ci::PipelineEditorController < Projects::ApplicationController before_action :check_can_collaborate! before_action do push_frontend_feature_flag(:ci_job_assistant_drawer, @project) - push_frontend_feature_flag(:ai_ci_config_generator, @user) push_frontend_feature_flag(:ci_graphql_pipeline_mini_graph, @project) end diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb index b781365b3c3..dd969efa49b 100644 --- a/app/controllers/projects/clusters_controller.rb +++ b/app/controllers/projects/clusters_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -class Projects::ClustersController < Clusters::ClustersController - prepend_before_action :project +class Projects::ClustersController < ::Clusters::ClustersController before_action :repository before_action do @@ -13,7 +12,7 @@ class Projects::ClustersController < Clusters::ClustersController private def clusterable - @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user) + @clusterable ||= project && ClusterablePresenter.fabricate(project, current_user: current_user) end def project diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index 9cdbd2a30f6..66ce501f9f0 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -22,6 +22,34 @@ class Projects::DeployKeysController < Projects::ApplicationController end end + def enabled_keys + respond_to do |format| + format.json do + enabled_keys = find_keys(filter: :enabled_keys) + render json: { keys: serialize(enabled_keys) } + end + end + end + + def available_project_keys + respond_to do |format| + format.json do + available_project_keys = find_keys(filter: :available_project_keys) + render json: { keys: serialize(available_project_keys) } + end + end + end + + def available_public_keys + respond_to do |format| + format.json do + available_public_keys = find_keys(filter: :available_public_keys) + + render json: { keys: serialize(available_public_keys) } + end + end + end + def new redirect_to_repository end @@ -108,4 +136,17 @@ class Projects::DeployKeysController < Projects::ApplicationController def redirect_to_repository redirect_to_repository_settings(@project, anchor: 'js-deploy-keys-settings') end + + def find_keys(params) + DeployKeys::DeployKeysFinder.new(@project, current_user, params) + .execute + end + + def serialize(keys) + opts = { user: current_user, project: project } + + DeployKeys::DeployKeySerializer.new + .with_pagination(request, response) + .represent(keys, opts) + end end diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 4b2749dc716..8cdd6efa7c5 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -14,6 +14,10 @@ class Projects::EnvironmentsController < Projects::ApplicationController push_frontend_feature_flag(:k8s_watch_api, project) end + before_action only: [:folder] do + push_frontend_feature_flag(:environments_folder_new_look, project) + end + before_action :authorize_read_environment! before_action :authorize_create_environment!, only: [:new, :create] before_action :authorize_stop_environment!, only: [:stop] diff --git a/app/controllers/projects/gcp/artifact_registry/base_controller.rb b/app/controllers/projects/gcp/artifact_registry/base_controller.rb new file mode 100644 index 00000000000..4084427f3e5 --- /dev/null +++ b/app/controllers/projects/gcp/artifact_registry/base_controller.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Projects + module Gcp + module ArtifactRegistry + class BaseController < ::Projects::ApplicationController + before_action :ensure_feature_flag + before_action :ensure_saas + before_action :authorize_read_container_image! + before_action :ensure_private_project + + feature_category :container_registry + urgency :low + + private + + def ensure_feature_flag + return if Feature.enabled?(:gcp_technical_demo, project) + + @error = 'Feature flag disabled' + + render + end + + def ensure_saas + return if Gitlab.com_except_jh? # rubocop: disable Gitlab/AvoidGitlabInstanceChecks -- demo requirement + + @error = "Can't run here" + + render + end + + def ensure_private_project + return if project.private? + + @error = 'Can only run on private projects' + + render + end + end + end + end +end diff --git a/app/controllers/projects/gcp/artifact_registry/docker_images_controller.rb b/app/controllers/projects/gcp/artifact_registry/docker_images_controller.rb new file mode 100644 index 00000000000..b88b86975a4 --- /dev/null +++ b/app/controllers/projects/gcp/artifact_registry/docker_images_controller.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +module Projects + module Gcp + module ArtifactRegistry + class DockerImagesController < Projects::Gcp::ArtifactRegistry::BaseController + before_action :require_gcp_params + before_action :handle_pagination + + REPO_NAME_REGEX = %r{/repositories/(.*)/dockerImages/} + + def index + result = service.execute(page_token: params[:page_token]) + + if result.success? + @docker_images = process_docker_images(result.payload[:images] || []) + @next_page_token = result.payload[:next_page_token] + @artifact_repository_name = artifact_repository_name + @error = @docker_images.blank? ? 'No docker images' : false + else + @error = result.message + end + end + + private + + def service + ::Integrations::GoogleCloudPlatform::ArtifactRegistry::ListDockerImagesService.new( + project: @project, + current_user: current_user, + params: { + gcp_project_id: gcp_project_id, + gcp_location: gcp_location, + gcp_repository: gcp_ar_repository, + gcp_wlif: gcp_wlif_url + } + ) + end + + def process_docker_images(raw_images) + raw_images.map { |r| process_docker_image(r) } + end + + def process_docker_image(raw_image) + DockerImage.new( + name: raw_image[:name], + uri: raw_image[:uri], + tags: raw_image[:tags], + image_size_bytes: raw_image[:size_bytes], + media_type: raw_image[:media_type], + upload_time: raw_image[:uploaded_at], + build_time: raw_image[:built_at], + update_time: raw_image[:updated_at] + ) + end + + def artifact_repository_name + return unless @docker_images.present? + + (@docker_images.first.name || '')[REPO_NAME_REGEX, 1] + end + + def handle_pagination + @page = Integer(params[:page] || 1) + @page_tokens = {} + @previous_page_token = nil + + if params[:page_tokens] + @page_tokens = ::Gitlab::Json.parse(Base64.decode64(params[:page_tokens])) + @previous_page_token = @page_tokens[(@page - 1).to_s] + end + + @page_tokens[@page.to_s] = params[:page_token] + @page_tokens = Base64.encode64(::Gitlab::Json.dump(@page_tokens.compact)) + end + + def require_gcp_params + return unless gcp_project_id.blank? || gcp_location.blank? || gcp_ar_repository.blank? || gcp_wlif_url.blank? + + redirect_to new_namespace_project_gcp_artifact_registry_setup_path + end + + def gcp_project_id + params[:gcp_project_id] + end + + def gcp_location + params[:gcp_location] + end + + def gcp_ar_repository + params[:gcp_ar_repository] + end + + def gcp_wlif_url + params[:gcp_wlif_url] + end + + class DockerImage + include ActiveModel::API + + attr_accessor :name, :uri, :tags, :image_size_bytes, :upload_time, :media_type, :build_time, :update_time + + SHORT_NAME_REGEX = %r{dockerImages/(.*)$} + + def short_name + (name || '')[SHORT_NAME_REGEX, 1] + end + + def updated_at + return unless update_time + + Time.zone.parse(update_time) + end + + def built_at + return unless build_time + + Time.zone.parse(build_time) + end + + def uploaded_at + return unless upload_time + + Time.zone.parse(upload_time) + end + end + end + end + end +end diff --git a/app/controllers/projects/gcp/artifact_registry/setup_controller.rb b/app/controllers/projects/gcp/artifact_registry/setup_controller.rb new file mode 100644 index 00000000000..e90304ce593 --- /dev/null +++ b/app/controllers/projects/gcp/artifact_registry/setup_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Projects + module Gcp + module ArtifactRegistry + class SetupController < ::Projects::Gcp::ArtifactRegistry::BaseController + def new; end + end + end + end +end diff --git a/app/controllers/projects/group_links_controller.rb b/app/controllers/projects/group_links_controller.rb index 5f8bf423219..855b9824cf2 100644 --- a/app/controllers/projects/group_links_controller.rb +++ b/app/controllers/projects/group_links_controller.rb @@ -3,7 +3,7 @@ class Projects::GroupLinksController < Projects::ApplicationController layout 'project_settings' before_action :authorize_admin_project!, except: [:destroy] - before_action :authorize_admin_project_group_link!, only: [:destroy] + before_action :authorize_manage_destroy!, only: [:destroy] before_action :authorize_admin_project_member!, only: [:update] feature_category :groups_and_projects @@ -20,8 +20,8 @@ class Projects::GroupLinksController < Projects::ApplicationController else render json: {} end - elsif result.reason == :not_found - render json: { message: result.message }, status: :not_found + else + render json: { message: result.message }, status: result.reason end end @@ -47,7 +47,7 @@ class Projects::GroupLinksController < Projects::ApplicationController end format.js do - render json: { message: result.message }, status: :not_found if result.reason == :not_found + render json: { message: result.message }, status: result.reason end end end @@ -55,8 +55,8 @@ class Projects::GroupLinksController < Projects::ApplicationController protected - def authorize_admin_project_group_link! - render_404 unless can?(current_user, :admin_project_group_link, group_link) + def authorize_manage_destroy! + render_404 unless can?(current_user, :manage_destroy, group_link) end def group_link diff --git a/app/controllers/projects/integrations/shimos_controller.rb b/app/controllers/projects/integrations/shimos_controller.rb deleted file mode 100644 index 6c8313d0805..00000000000 --- a/app/controllers/projects/integrations/shimos_controller.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Projects - module Integrations - class ShimosController < Projects::ApplicationController - feature_category :integrations - - before_action :ensure_renderable - - def show; end - - private - - def ensure_renderable - render_404 unless project.has_shimo? && project.shimo_integration&.render? - end - end - end -end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index a6444dc038c..d0eabf8d837 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -49,6 +49,7 @@ class Projects::IssuesController < Projects::ApplicationController push_frontend_feature_flag(:service_desk_ticket) push_frontend_feature_flag(:issues_list_drawer, project) push_frontend_feature_flag(:linked_work_items, project) + push_frontend_feature_flag(:display_work_item_epic_issue_sidebar, project) end before_action only: [:index, :show] do @@ -67,6 +68,7 @@ class Projects::IssuesController < Projects::ApplicationController push_force_frontend_feature_flag(:work_items_mvc_2, project&.work_items_mvc_2_feature_flag_enabled?) push_frontend_feature_flag(:epic_widget_edit_confirmation, project) push_frontend_feature_flag(:moved_mr_sidebar, project) + push_frontend_feature_flag(:display_work_item_epic_issue_sidebar, project) push_force_frontend_feature_flag(:linked_work_items, project.linked_work_items_feature_flag_enabled?) push_frontend_feature_flag(:notifications_todos_buttons, current_user) end diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb index d5a7f25d4ce..4062e625e07 100644 --- a/app/controllers/projects/jobs_controller.rb +++ b/app/controllers/projects/jobs_controller.rb @@ -21,7 +21,6 @@ class Projects::JobsController < Projects::ApplicationController before_action :verify_api_request!, only: :terminal_websocket_authorize before_action :authorize_create_proxy_build!, only: :proxy_websocket_authorize before_action :verify_proxy_request!, only: :proxy_websocket_authorize - before_action :push_job_log_jump_to_failures, only: [:show] before_action :reject_if_build_artifacts_size_refreshing!, only: [:erase] before_action :push_ai_build_failure_cause, only: [:show] layout 'project' @@ -277,10 +276,6 @@ class Projects::JobsController < Projects::ApplicationController ::Gitlab::Workhorse.channel_websocket(service) end - def push_job_log_jump_to_failures - push_frontend_feature_flag(:job_log_jump_to_failures, @project) - end - def push_ai_build_failure_cause push_frontend_feature_flag(:ai_build_failure_cause, @project) end diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 5bd0063ab95..b269d41fa77 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -32,8 +32,11 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic # rubocop: disable Metrics/AbcSize def diffs_batch + collapse_generated = Feature.enabled?(:collapse_generated_diff_files, project) + diff_options_hash = diff_options diff_options_hash[:paths] = params[:paths] if params[:paths] + diff_options_hash[:collapse_generated] = collapse_generated diffs = @compare.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options_hash) @@ -59,7 +62,8 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic params[:expanded], params[:page], params[:per_page], - options[:merge_ref_head_diff] + options[:merge_ref_head_diff], + collapse_generated ] expires_in(1.day) if cache_with_max_age? diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index eb7505bd81f..0899e303305 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -41,18 +41,11 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:moved_mr_sidebar, project) push_frontend_feature_flag(:sast_reports_in_inline_diff, project) push_frontend_feature_flag(:mr_experience_survey, project) - push_force_frontend_feature_flag(:summarize_my_code_review, summarize_my_code_review_enabled?) push_frontend_feature_flag(:ci_job_failures_in_mr, project) push_frontend_feature_flag(:mr_pipelines_graphql, project) push_frontend_feature_flag(:notifications_todos_buttons, current_user) - push_frontend_feature_flag(:widget_pipeline_pass_subscription_update, project) push_frontend_feature_flag(:mr_request_changes, current_user) - end - - before_action only: [:edit] do - if can?(current_user, :fill_in_merge_request_template, project) - push_frontend_feature_flag(:fill_in_mr_template, project) - end + push_frontend_feature_flag(:merge_blocked_component, current_user) end around_action :allow_gitaly_ref_name_caching, only: [:index, :show, :diffs, :discussions] @@ -345,15 +338,9 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo end def discussions - if Feature.enabled?(:only_highlight_discussions_requested, project) - super do |discussion_notes| - note_ids = discussion_notes.flat_map { |x| x.notes.collect(&:id) } - merge_request.discussions_diffs.load_highlight(diff_note_ids: note_ids) - end - else - merge_request.discussions_diffs.load_highlight - - super + super do |discussion_notes| + note_ids = discussion_notes.flat_map { |x| x.notes.collect(&:id) } + merge_request.discussions_diffs.load_highlight(diff_note_ids: note_ids) end end @@ -461,7 +448,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo @update_current_user_path = expose_path(api_v4_user_preferences_path) @endpoint_metadata_url = endpoint_metadata_url(@project, @merge_request) @endpoint_diff_batch_url = endpoint_diff_batch_url(@project, @merge_request) - @diffs_batch_cache_key = @merge_request.merge_head_diff&.id if merge_request.diffs_batch_cache_with_max_age? + + if merge_request.diffs_batch_cache_with_max_age? + @diffs_batch_cache_key = @merge_request.merge_head_diff&.patch_id_sha + end set_pipeline_variables @@ -471,11 +461,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo end def get_diffs_count - if show_only_context_commits? - @merge_request.context_commits_diff.raw_diffs.size - else - @merge_request.diff_size - end + return @merge_request.context_commits_diff.raw_diffs.size if show_only_context_commits? + return @merge_request.merge_request_diffs.find_by_id(params[:diff_id])&.size if params[:diff_id] + + @merge_request.diff_size end def merge_request_update_params @@ -598,7 +587,11 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo when :parsed render json: Gitlab::Json.dump(report_comparison[:data]), status: :ok when :error - render json: { status_reason: report_comparison[:status_reason] }, status: :bad_request + render json: { + errors: [report_comparison[:status_reason]], + status_reason: report_comparison[:status_reason] + }, + status: :bad_request else raise "Failed to build comparison response as comparison yielded unknown status '#{report_comparison[:status]}'" end @@ -629,7 +622,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo params = request .query_parameters .merge(view: 'inline', diff_head: true, w: show_whitespace, page: '0', per_page: per_page) - params[:ck] = merge_request.merge_head_diff&.id if merge_request.diffs_batch_cache_with_max_age? + params[:ck] = merge_request.merge_head_diff&.patch_id_sha if merge_request.diffs_batch_cache_with_max_age? diffs_batch_project_json_merge_request_path(project, merge_request, 'json', params) end @@ -638,16 +631,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo Date.strptime(date, "%Y-%m-%d")&.to_time&.to_i if date rescue Date::Error, TypeError end - - def summarize_my_code_review_enabled? - namespace = project&.group&.root_ancestor - return false if namespace.nil? - - Feature.enabled?(:summarize_my_code_review, current_user) && - namespace.group_namespace? && - namespace.licensed_feature_available?(:summarize_my_mr_code_review) && - Gitlab::Llm::StageCheck.available?(namespace, :summarize_my_mr_code_review) - end end Projects::MergeRequestsController.prepend_mod_with('Projects::MergeRequestsController') diff --git a/app/controllers/projects/ml/candidates_controller.rb b/app/controllers/projects/ml/candidates_controller.rb index 12111c45fde..9905e454acb 100644 --- a/app/controllers/projects/ml/candidates_controller.rb +++ b/app/controllers/projects/ml/candidates_controller.rb @@ -9,9 +9,7 @@ module Projects feature_category :mlops - def show - @include_ci_info = @candidate.from_ci? && can?(current_user, :read_build, @candidate.ci_build) - end + def show; end def destroy @experiment = @candidate.experiment diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index cd2db2dad2c..516aa70cf89 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -166,6 +166,8 @@ class Projects::PipelinesController < Projects::ApplicationController @stage = pipeline.stage(params[:stage]) return not_found unless @stage + return unless stage_stale? + render json: StageSerializer .new(project: @project, current_user: @current_user) .represent(@stage, details: true, retried: params[:retried]) @@ -263,6 +265,14 @@ class Projects::PipelinesController < Projects::ApplicationController redirect_to url_for(safe_params.except(:scope).merge(status: safe_params[:scope])), status: :moved_permanently end + def stage_stale? + return true if Feature.disabled?(:pipeline_stage_set_last_modified, @current_user) + + last_modified = [@stage.updated_at.utc, @stage.statuses.maximum(:updated_at)].max + + stale?(last_modified: last_modified, etag: @stage) + end + # rubocop: disable CodeReuse/ActiveRecord def pipeline return @pipeline if defined?(@pipeline) diff --git a/app/controllers/projects/service_desk/custom_email_controller.rb b/app/controllers/projects/service_desk/custom_email_controller.rb index fb5e87f9a97..7c1623cfcd1 100644 --- a/app/controllers/projects/service_desk/custom_email_controller.rb +++ b/app/controllers/projects/service_desk/custom_email_controller.rb @@ -3,7 +3,6 @@ module Projects module ServiceDesk class CustomEmailController < Projects::ApplicationController - before_action :check_feature_flag_enabled before_action :authorize_admin_project! feature_category :service_desk @@ -75,10 +74,6 @@ module Projects error_message: error_message } end - - def check_feature_flag_enabled - render_404 unless Feature.enabled?(:service_desk_custom_email, @project) - end end end end diff --git a/app/controllers/projects/service_desk_controller.rb b/app/controllers/projects/service_desk_controller.rb index 70cb439c4f3..a53e8859ee6 100644 --- a/app/controllers/projects/service_desk_controller.rb +++ b/app/controllers/projects/service_desk_controller.rb @@ -29,7 +29,13 @@ class Projects::ServiceDeskController < Projects::ApplicationController end def allowed_update_attributes - %i[issue_template_key outgoing_name project_key add_external_participants_from_cc] + %i[ + issue_template_key + outgoing_name + project_key + reopen_issue_on_external_participant_note + add_external_participants_from_cc + ] end def service_desk_attributes @@ -42,6 +48,7 @@ class Projects::ServiceDeskController < Projects::ApplicationController template_file_missing: service_desk_settings&.issue_template_missing?, outgoing_name: service_desk_settings&.outgoing_name, project_key: service_desk_settings&.project_key, + reopen_issue_on_external_participant_note: service_desk_settings&.reopen_issue_on_external_participant_note, add_external_participants_from_cc: service_desk_settings&.add_external_participants_from_cc } end diff --git a/app/controllers/projects/settings/merge_requests_controller.rb b/app/controllers/projects/settings/merge_requests_controller.rb index f09e324f574..2724e2d9eec 100644 --- a/app/controllers/projects/settings/merge_requests_controller.rb +++ b/app/controllers/projects/settings/merge_requests_controller.rb @@ -52,6 +52,7 @@ module Projects :resolve_outdated_diff_discussions, :only_allow_merge_if_all_discussions_are_resolved, :only_allow_merge_if_pipeline_succeeds, + :allow_merge_without_pipeline, :printing_merge_request_link_enabled, :remove_source_branch_after_merge, :merge_method, diff --git a/app/controllers/projects/tree_controller.rb b/app/controllers/projects/tree_controller.rb index cfcc27edf3e..1bbf272e8f9 100644 --- a/app/controllers/projects/tree_controller.rb +++ b/app/controllers/projects/tree_controller.rb @@ -22,6 +22,7 @@ class Projects::TreeController < Projects::ApplicationController push_frontend_feature_flag(:blob_blame_info, @project) push_frontend_feature_flag(:highlight_js_worker, @project) push_frontend_feature_flag(:explain_code_chat, current_user) + push_frontend_feature_flag(:encoding_logs_tree) push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks) end |