diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-16 18:18:33 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-16 18:18:33 +0000 |
commit | f64a639bcfa1fc2bc89ca7db268f594306edfd7c (patch) | |
tree | a2c3c2ebcc3b45e596949db485d6ed18ffaacfa1 /app/controllers/projects | |
parent | bfbc3e0d6583ea1a91f627528bedc3d65ba4b10f (diff) | |
download | gitlab-ce-f64a639bcfa1fc2bc89ca7db268f594306edfd7c.tar.gz |
Add latest changes from gitlab-org/gitlab@13-10-stable-eev13.10.0-rc40
Diffstat (limited to 'app/controllers/projects')
20 files changed, 100 insertions, 113 deletions
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 3bb00978aac..0080ae1a5be 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -31,9 +31,7 @@ class Projects::BlobController < Projects::ApplicationController before_action :editor_variables, except: [:show, :preview, :diff] before_action :validate_diff_params, only: :diff before_action :set_last_commit_sha, only: [:edit, :update] - before_action only: :new do - record_experiment_user(:ci_syntax_templates, namespace_id: @project.namespace_id) if params[:file_name] == @project.ci_config_path_or_default - end + before_action :record_experiment, only: :new track_redis_hll_event :create, :update, name: 'g_edit_by_sfe' @@ -263,4 +261,10 @@ class Projects::BlobController < Projects::ApplicationController def visitor_id current_user&.id end + + def record_experiment + return unless params[:file_name] == @project.ci_config_path_or_default && @project.namespace.recent? + + record_experiment_user(:ci_syntax_templates_b, namespace_id: @project.namespace_id) + end end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index d2e5d319f96..418f2ee1592 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -21,13 +21,13 @@ class Projects::BoardsController < Projects::ApplicationController def boards_finder strong_memoize :boards_finder do - Boards::ListService.new(parent, current_user) + Boards::BoardsFinder.new(parent, current_user) end end def board_finder strong_memoize :board_finder do - Boards::ListService.new(parent, current_user, board_id: params[:id]) + Boards::BoardsFinder.new(parent, current_user, board_id: params[:id]) end end @@ -45,6 +45,6 @@ class Projects::BoardsController < Projects::ApplicationController end def authorize_read_board! - access_denied! unless can?(current_user, :read_board, project) + access_denied! unless can?(current_user, :read_issue_board, project) end end diff --git a/app/controllers/projects/ci/daily_build_group_report_results_controller.rb b/app/controllers/projects/ci/daily_build_group_report_results_controller.rb index aabcb74cefa..fee216da492 100644 --- a/app/controllers/projects/ci/daily_build_group_report_results_controller.rb +++ b/app/controllers/projects/ci/daily_build_group_report_results_controller.rb @@ -1,11 +1,6 @@ # frozen_string_literal: true class Projects::Ci::DailyBuildGroupReportResultsController < Projects::ApplicationController - include Gitlab::Utils::StrongMemoize - - MAX_ITEMS = 1000 - REPORT_WINDOW = 90.days - before_action :authorize_read_build_report_results! before_action :validate_param_type! @@ -40,53 +35,23 @@ class Projects::Ci::DailyBuildGroupReportResultsController < Projects::Applicati end def report_results - if ::Gitlab::Ci::Features.use_coverage_data_new_finder?(project) - ::Ci::Testing::DailyBuildGroupReportResultsFinder.new( - params: new_finder_params, - current_user: current_user - ).execute - else - Ci::DailyBuildGroupReportResultsFinder.new(**finder_params).execute - end + ::Ci::DailyBuildGroupReportResultsFinder.new( + params: finder_params, + current_user: current_user + ).execute end - def new_finder_params + def finder_params { project: project, coverage: true, - start_date: start_date, - end_date: end_date, + start_date: params[:start_date], + end_date: params[:end_date], ref_path: params[:ref_path], sort: true } end - def finder_params - { - current_user: current_user, - project: project, - ref_path: params.require(:ref_path), - start_date: start_date, - end_date: end_date, - limit: MAX_ITEMS - } - end - - def start_date - strong_memoize(:start_date) do - start_date = Date.parse(params.require(:start_date)) - - # The start_date cannot be older than `end_date - 90 days` - [start_date, end_date - REPORT_WINDOW].max - end - end - - def end_date - strong_memoize(:end_date) do - Date.parse(params.require(:end_date)) - end - end - def allowed_param_types Ci::DailyBuildGroupReportResult::PARAM_TYPES end diff --git a/app/controllers/projects/ci/pipeline_editor_controller.rb b/app/controllers/projects/ci/pipeline_editor_controller.rb index 3552915b561..4d491b33aa0 100644 --- a/app/controllers/projects/ci/pipeline_editor_controller.rb +++ b/app/controllers/projects/ci/pipeline_editor_controller.rb @@ -5,12 +5,13 @@ class Projects::Ci::PipelineEditorController < Projects::ApplicationController before_action do push_frontend_feature_flag(:ci_config_visualization_tab, @project, default_enabled: :yaml) push_frontend_feature_flag(:ci_config_merged_tab, @project, default_enabled: :yaml) + push_frontend_feature_flag(:pipeline_status_for_pipeline_editor, @project, default_enabled: :yaml) + push_frontend_feature_flag(:pipeline_editor_empty_state_action, @project, default_enabled: :yaml) end feature_category :pipeline_authoring def show - render_404 unless ::Gitlab::Ci::Features.ci_pipeline_editor_page_enabled?(@project) end private diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb index ffdd9fca95b..8154128da29 100644 --- a/app/controllers/projects/commit_controller.rb +++ b/app/controllers/projects/commit_controller.rb @@ -16,10 +16,16 @@ class Projects::CommitController < Projects::ApplicationController before_action :authorize_read_pipeline!, only: [:pipelines] before_action :commit before_action :define_commit_vars, only: [:show, :diff_for_path, :diff_files, :pipelines, :merge_requests] + before_action :define_commit_box_vars, only: [:show, :pipelines] before_action :define_note_vars, only: [:show, :diff_for_path, :diff_files] before_action :authorize_edit_tree!, only: [:revert, :cherry_pick] - before_action only: [:pipelines] do - push_frontend_feature_flag(:ci_mini_pipeline_gl_dropdown, @project, type: :development, default_enabled: :yaml) + + before_action only: [:show, :pipelines] do + push_frontend_feature_flag(:ci_commit_pipeline_mini_graph_vue, @project, default_enabled: :yaml) + end + + before_action do + push_frontend_feature_flag(:pick_into_project) end BRANCH_SEARCH_LIMIT = 1000 @@ -53,6 +59,8 @@ class Projects::CommitController < Projects::ApplicationController # rubocop: disable CodeReuse/ActiveRecord def pipelines + set_pipeline_feature_flag + @pipelines = @commit.pipelines.order(id: :desc) @pipelines = @pipelines.where(ref: params[:ref]).page(params[:page]).per(30) if params[:ref] @@ -127,6 +135,10 @@ class Projects::CommitController < Projects::ApplicationController private + def set_pipeline_feature_flag + push_frontend_feature_flag(:new_pipelines_table, @project, default_enabled: :yaml) + end + def create_new_branch? params[:create_merge_request].present? || !can?(current_user, :push_code, @project) end @@ -199,6 +211,15 @@ class Projects::CommitController < Projects::ApplicationController end # rubocop: enable CodeReuse/ActiveRecord + def define_commit_box_vars + @last_pipeline = @commit.last_pipeline + + return unless ::Gitlab::Ci::Features.ci_commit_pipeline_mini_graph_vue_enabled?(@project) + return unless @commit.last_pipeline + + @last_pipeline_stages = StageSerializer.new(project: @project, current_user: @current_user).represent(@last_pipeline.stages) + end + def assign_change_commit_vars @start_branch = params[:start_branch] @commit_params = { commit: @commit } diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 6be0b465402..81f80d37662 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -6,6 +6,7 @@ class Projects::CompareController < Projects::ApplicationController include DiffForPath include DiffHelper include RendersCommits + include CompareHelper # Authorize before_action :require_non_empty_project @@ -19,6 +20,10 @@ class Projects::CompareController < Projects::ApplicationController # Validation before_action :validate_refs! + before_action do + push_frontend_feature_flag(:compare_repo_dropdown, source_project, default_enabled: :yaml) + end + feature_category :source_code_management def index @@ -37,16 +42,18 @@ class Projects::CompareController < Projects::ApplicationController end def create - if params[:from].blank? || params[:to].blank? + from_to_vars = { + from: params[:from].presence, + to: params[:to].presence, + from_project_id: params[:from_project_id].presence + } + + if from_to_vars[:from].blank? || from_to_vars[:to].blank? flash[:alert] = "You must select a Source and a Target revision" - from_to_vars = { - from: params[:from].presence, - to: params[:to].presence - } - redirect_to project_compare_index_path(@project, from_to_vars) + + redirect_to project_compare_index_path(source_project, from_to_vars) else - redirect_to project_compare_path(@project, - params[:from], params[:to]) + redirect_to project_compare_path(source_project, from_to_vars) end end @@ -73,13 +80,34 @@ class Projects::CompareController < Projects::ApplicationController return if valid.all? flash[:alert] = "Invalid branch name" - redirect_to project_compare_index_path(@project) + redirect_to project_compare_index_path(source_project) + end + + # target == start_ref == from + def target_project + strong_memoize(:target_project) do + next source_project unless params.key?(:from_project_id) + next source_project unless Feature.enabled?(:compare_repo_dropdown, source_project, default_enabled: :yaml) + next source_project if params[:from_project_id].to_i == source_project.id + + target_project = target_projects(source_project).find_by_id(params[:from_project_id]) + + # Just ignore the field if it points at a non-existent or hidden project + next source_project unless target_project && can?(current_user, :download_code, target_project) + + target_project + end + end + + # source == head_ref == to + def source_project + project end def compare return @compare if defined?(@compare) - @compare = CompareService.new(@project, head_ref).execute(@project, start_ref) + @compare = CompareService.new(source_project, head_ref).execute(target_project, start_ref) end def start_ref @@ -102,9 +130,9 @@ class Projects::CompareController < Projects::ApplicationController def define_environment if compare - environment_params = @repository.branch_exists?(head_ref) ? { ref: head_ref } : { commit: compare.commit } + environment_params = source_project.repository.branch_exists?(head_ref) ? { ref: head_ref } : { commit: compare.commit } environment_params[:find_latest] = true - @environment = EnvironmentsFinder.new(@project, current_user, environment_params).execute.last + @environment = EnvironmentsFinder.new(source_project, current_user, environment_params).execute.last end end @@ -114,8 +142,8 @@ class Projects::CompareController < Projects::ApplicationController # rubocop: disable CodeReuse/ActiveRecord def merge_request - @merge_request ||= MergeRequestsFinder.new(current_user, project_id: @project.id).execute.opened - .find_by(source_project: @project, source_branch: head_ref, target_branch: start_ref) + @merge_request ||= MergeRequestsFinder.new(current_user, project_id: target_project.id).execute.opened + .find_by(source_project: source_project, source_branch: head_ref, target_branch: start_ref) end # rubocop: enable CodeReuse/ActiveRecord end diff --git a/app/controllers/projects/forks_controller.rb b/app/controllers/projects/forks_controller.rb index 5576d5766c7..33f046f414f 100644 --- a/app/controllers/projects/forks_controller.rb +++ b/app/controllers/projects/forks_controller.rb @@ -16,6 +16,10 @@ class Projects::ForksController < Projects::ApplicationController feature_category :source_code_management + before_action do + push_frontend_feature_flag(:fork_project_form) + end + def index @total_forks_count = project.forks.size @public_forks_count = project.forks.public_only.size diff --git a/app/controllers/projects/graphs_controller.rb b/app/controllers/projects/graphs_controller.rb index 2b030793c58..ad39b317b31 100644 --- a/app/controllers/projects/graphs_controller.rb +++ b/app/controllers/projects/graphs_controller.rb @@ -62,7 +62,7 @@ class Projects::GraphsController < Projects::ApplicationController return unless can?(current_user, :read_build_report_results, project) date_today = Date.current - report_window = Projects::Ci::DailyBuildGroupReportResultsController::REPORT_WINDOW + report_window = ::Ci::DailyBuildGroupReportResultsFinder::REPORT_WINDOW @daily_coverage_options = { base_params: { diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 2816977277a..c454ae6eaf4 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -9,7 +9,6 @@ class Projects::IssuesController < Projects::ApplicationController include IssuesCalendar include SpammableActions include RecordUserLastActivity - include CommentAndCloseFlag ISSUES_EXCEPT_ACTIONS = %i[index calendar new create bulk_update import_csv export_csv service_desk].freeze SET_ISSUEABLES_INDEX_ONLY_ACTIONS = %i[index calendar service_desk].freeze @@ -45,6 +44,7 @@ class Projects::IssuesController < Projects::ApplicationController push_frontend_feature_flag(:tribute_autocomplete, @project) push_frontend_feature_flag(:vue_issuables_list, project) push_frontend_feature_flag(:usage_data_design_action, project, default_enabled: true) + push_frontend_feature_flag(:improved_emoji_picker, project, default_enabled: :yaml) end before_action only: :show do @@ -54,7 +54,6 @@ class Projects::IssuesController < Projects::ApplicationController push_to_gon_attributes(:features, real_time_feature_flag, real_time_enabled) push_frontend_feature_flag(:confidential_notes, @project, default_enabled: :yaml) - record_experiment_user(:invite_members_version_a) record_experiment_user(:invite_members_version_b) end diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index c9e9a34ad88..2c6d5f62b4e 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -11,7 +11,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo include RecordUserLastActivity include SourcegraphDecorator include DiffHelper - include CommentAndCloseFlag skip_before_action :merge_request, only: [:index, :bulk_update, :export_csv] before_action :apply_diff_view_cookie!, only: [:show] @@ -33,7 +32,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:file_identifier_hash) push_frontend_feature_flag(:batch_suggestions, @project, default_enabled: true) push_frontend_feature_flag(:approvals_commented_by, @project, default_enabled: true) - push_frontend_feature_flag(:merge_request_widget_graphql, @project) + push_frontend_feature_flag(:merge_request_widget_graphql, @project, default_enabled: :yaml) push_frontend_feature_flag(:drag_comment_selection, @project, default_enabled: true) push_frontend_feature_flag(:unified_diff_components, @project, default_enabled: true) push_frontend_feature_flag(:default_merge_ref_for_diffs, @project, default_enabled: :yaml) @@ -41,12 +40,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:remove_resolve_note, @project, default_enabled: true) push_frontend_feature_flag(:diffs_gradual_load, @project, default_enabled: true) push_frontend_feature_flag(:codequality_backend_comparison, @project, default_enabled: :yaml) - push_frontend_feature_flag(:suggestions_custom_commit, @project, default_enabled: true) push_frontend_feature_flag(:local_file_reviews, default_enabled: :yaml) push_frontend_feature_flag(:paginated_notes, @project, default_enabled: :yaml) - push_frontend_feature_flag(:ci_mini_pipeline_gl_dropdown, @project, type: :development, default_enabled: :yaml) + push_frontend_feature_flag(:new_pipelines_table, @project, default_enabled: :yaml) - record_experiment_user(:invite_members_version_a) record_experiment_user(:invite_members_version_b) end diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb index 71a93701dc4..77fd7688caf 100644 --- a/app/controllers/projects/notes_controller.rb +++ b/app/controllers/projects/notes_controller.rb @@ -10,7 +10,6 @@ class Projects::NotesController < Projects::ApplicationController before_action :authorize_read_note! before_action :authorize_create_note!, only: [:create] before_action :authorize_resolve_note!, only: [:resolve, :unresolve] - before_action :create_rate_limit, only: [:create] feature_category :issue_tracking @@ -91,20 +90,4 @@ class Projects::NotesController < Projects::ApplicationController def whitelist_query_limiting Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-foss/issues/42383') end - - def create_rate_limit - key = :notes_create - return unless rate_limiter.throttled?(key, scope: [current_user], users_allowlist: rate_limit_users_allowlist) - - rate_limiter.log_request(request, "#{key}_request_limit".to_sym, current_user) - render plain: _('This endpoint has been requested too many times. Try again later.'), status: :too_many_requests - end - - def rate_limiter - ::Gitlab::ApplicationRateLimiter - end - - def rate_limit_users_allowlist - Gitlab::CurrentSettings.current_application_settings.notes_create_limit_allowlist - end end diff --git a/app/controllers/projects/pipelines/tests_controller.rb b/app/controllers/projects/pipelines/tests_controller.rb index 1702783b10f..25ec7ab1335 100644 --- a/app/controllers/projects/pipelines/tests_controller.rb +++ b/app/controllers/projects/pipelines/tests_controller.rb @@ -32,7 +32,7 @@ module Projects # rubocop: disable CodeReuse/ActiveRecord def builds - @builds ||= pipeline.latest_builds.for_ids(build_ids).presence || render_404 + @builds ||= pipeline.latest_builds.id_in(build_ids).presence || render_404 end def build_ids diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 59b14bbb91d..9b5f5871c41 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -13,12 +13,11 @@ class Projects::PipelinesController < Projects::ApplicationController before_action :authorize_create_pipeline!, only: [:new, :create, :config_variables] before_action :authorize_update_pipeline!, only: [:retry, :cancel] before_action do - push_frontend_feature_flag(:pipelines_security_report_summary, project) - push_frontend_feature_flag(:new_pipeline_form, project, default_enabled: true) + push_frontend_feature_flag(:new_pipeline_form, project, default_enabled: :yaml) push_frontend_feature_flag(:graphql_pipeline_details, project, type: :development, default_enabled: :yaml) push_frontend_feature_flag(:graphql_pipeline_details_users, current_user, type: :development, default_enabled: :yaml) - push_frontend_feature_flag(:ci_mini_pipeline_gl_dropdown, project, type: :development, default_enabled: :yaml) push_frontend_feature_flag(:jira_for_vulnerabilities, project, type: :development, default_enabled: :yaml) + push_frontend_feature_flag(:new_pipelines_table, project, default_enabled: :yaml) end before_action :ensure_pipeline, only: [:show] diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index a7c7839dc9f..5972b29a298 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -8,10 +8,6 @@ class Projects::ProjectMembersController < Projects::ApplicationController # Authorize before_action :authorize_admin_project_member!, except: [:index, :leave, :request_access] - before_action do - push_frontend_feature_flag(:vue_project_members_list, @project, default_enabled: :yaml) - end - feature_category :authentication_and_authorization def index diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb index d4f7d0bc521..84b155c8002 100644 --- a/app/controllers/projects/protected_branches_controller.rb +++ b/app/controllers/projects/protected_branches_controller.rb @@ -21,6 +21,7 @@ class Projects::ProtectedBranchesController < Projects::ProtectedRefsController def protected_ref_params(*attrs) attrs = ([:name, + :allow_force_push, merge_access_levels_attributes: access_level_attributes, push_access_levels_attributes: access_level_attributes] + attrs).uniq diff --git a/app/controllers/projects/security/configuration_controller.rb b/app/controllers/projects/security/configuration_controller.rb index 9366ca7b0ed..bc4e58e54a9 100644 --- a/app/controllers/projects/security/configuration_controller.rb +++ b/app/controllers/projects/security/configuration_controller.rb @@ -3,19 +3,13 @@ module Projects module Security class ConfigurationController < Projects::ApplicationController + include SecurityAndCompliancePermissions + feature_category :static_application_security_testing def show - return render_404 unless feature_enabled? - render_403 unless can?(current_user, :read_security_configuration, project) end - - private - - def feature_enabled? - ::Feature.enabled?(:secure_security_and_compliance_configuration_page_on_ce, @project, default_enabled: :yaml) - end end end end diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index b5c73f29784..554eb01defe 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -12,8 +12,6 @@ class Projects::ServicesController < Projects::ApplicationController before_action :set_deprecation_notice_for_prometheus_service, only: [:edit, :update] before_action :redirect_deprecated_prometheus_service, only: [:update] before_action only: :edit do - push_frontend_feature_flag(:jira_issues_integration, @project, type: :licensed, default_enabled: true) - push_frontend_feature_flag(:jira_vulnerabilities_integration, @project, type: :licensed, default_enabled: true) push_frontend_feature_flag(:jira_for_vulnerabilities, @project, type: :development, default_enabled: :yaml) end diff --git a/app/controllers/projects/settings/operations_controller.rb b/app/controllers/projects/settings/operations_controller.rb index f8155b77e60..c407b15e29f 100644 --- a/app/controllers/projects/settings/operations_controller.rb +++ b/app/controllers/projects/settings/operations_controller.rb @@ -6,10 +6,6 @@ module Projects before_action :authorize_admin_operations! before_action :authorize_read_prometheus_alerts!, only: [:reset_alerting_token] - before_action do - push_frontend_feature_flag(:multiple_http_integrations_custom_mapping, @project) - end - respond_to :json, only: [:reset_alerting_token, :reset_pagerduty_token] helper_method :error_tracking_setting diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb index 779e149bb9c..ff28c3be298 100644 --- a/app/controllers/projects/snippets_controller.rb +++ b/app/controllers/projects/snippets_controller.rb @@ -22,6 +22,7 @@ class Projects::SnippetsController < Projects::Snippets::ApplicationController .execute .page(params[:page]) .inc_author + .inc_statistics return if redirect_out_of_range(@snippets) diff --git a/app/controllers/projects/templates_controller.rb b/app/controllers/projects/templates_controller.rb index ab05c9694fd..b4b8fb97049 100644 --- a/app/controllers/projects/templates_controller.rb +++ b/app/controllers/projects/templates_controller.rb @@ -25,7 +25,7 @@ class Projects::TemplatesController < Projects::ApplicationController def names respond_to do |format| - format.json { render json: TemplateFinder.all_template_names_array(project, params[:template_type].to_s.pluralize) } + format.json { render json: TemplateFinder.all_template_names_hash_or_array(project, params[:template_type].to_s) } end end |