From 78f85f3fd3a6743948f044c332cd1243547ef0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 16 Dec 2017 04:11:44 +0100 Subject: Add check step for creating GCP clusters --- .../projects/clusters/gcp_controller.rb | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index b64f7a2a6bd..558dae8e228 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,11 +1,14 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! before_action :authorize_google_api, except: [:login] + before_action :authorize_google_project_billing, only: [:check] before_action :authorize_create_cluster!, only: [:new, :create] + STATUS_POLLING_INTERVAL = 10_000 + def login begin - state = generate_session_key_redirect(gcp_new_namespace_project_clusters_path.to_s) + state = generate_session_key_redirect(gcp_check_namespace_project_clusters_path.to_s) @authorize_url = GoogleApi::CloudPlatform::Client.new( nil, callback_google_api_auth_url, @@ -15,6 +18,18 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def check + respond_to do |format| + format.json do + Gitlab::PollingInterval.set_header(response, interval: STATUS_POLLING_INTERVAL) + + Gitlab::Redis::SharedState.with do |redis| + render json: { billing: redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) } + end + end + end + end + def new @cluster = ::Clusters::Cluster.new.tap do |cluster| cluster.build_provider_gcp @@ -57,6 +72,14 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def authorize_google_project_billing + Gitlab::Redis::SharedState.with do |redis| + unless redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) == 'true' + CheckGcpProjectBillingWorker.perform_async(token_in_session) + end + end + end + def token_in_session @token_in_session ||= session[GoogleApi::CloudPlatform::Client.session_key_for_token] -- cgit v1.2.1 From 935a27cfef3c5a4dd9291c21af69b41a7169817d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 16 Dec 2017 04:22:16 +0100 Subject: Use 1 minute for status polling interval --- app/controllers/projects/clusters/gcp_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 558dae8e228..940c2a5d84f 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -4,7 +4,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_google_project_billing, only: [:check] before_action :authorize_create_cluster!, only: [:new, :create] - STATUS_POLLING_INTERVAL = 10_000 + STATUS_POLLING_INTERVAL = 1.minute.to_i def login begin -- cgit v1.2.1 From 914260930f800342c495114f507947ae35471e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 16 Dec 2017 05:26:07 +0100 Subject: Expand controller test suite matrix --- app/controllers/projects/clusters/gcp_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 940c2a5d84f..95c947001a3 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,14 +1,14 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! before_action :authorize_google_api, except: [:login] - before_action :authorize_google_project_billing, only: [:check] + before_action :authorize_google_project_billing, except: [:login, :check] before_action :authorize_create_cluster!, only: [:new, :create] STATUS_POLLING_INTERVAL = 1.minute.to_i def login begin - state = generate_session_key_redirect(gcp_check_namespace_project_clusters_path.to_s) + state = generate_session_key_redirect(gcp_new_namespace_project_clusters_path.to_s) @authorize_url = GoogleApi::CloudPlatform::Client.new( nil, callback_google_api_auth_url, @@ -76,6 +76,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController Gitlab::Redis::SharedState.with do |redis| unless redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) == 'true' CheckGcpProjectBillingWorker.perform_async(token_in_session) + redirect_to action: 'check' end end end -- cgit v1.2.1 From 6c0fd3c22dc767d8d4d90fa0a008874098a6f22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 16 Dec 2017 05:31:53 +0100 Subject: Handle html format in addition to json --- app/controllers/projects/clusters/gcp_controller.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 95c947001a3..34d4fd7d7ca 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -27,6 +27,8 @@ class Projects::Clusters::GcpController < Projects::ApplicationController render json: { billing: redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) } end end + + format.html { render :check } end end -- cgit v1.2.1 From 886fd13fceda053533a382d1652f9fcce475d0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 16 Dec 2017 17:02:26 +0100 Subject: Add Worker rerun action to GcpController --- app/controllers/projects/clusters/gcp_controller.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 34d4fd7d7ca..c965a055fdd 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,7 +1,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! before_action :authorize_google_api, except: [:login] - before_action :authorize_google_project_billing, except: [:login, :check] + before_action :authorize_google_project_billing, except: [:login, :check, :run_check] before_action :authorize_create_cluster!, only: [:new, :create] STATUS_POLLING_INTERVAL = 1.minute.to_i @@ -32,6 +32,15 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def run_check + respond_to do |format| + format.json do + CheckGcpProjectBillingWorker.perform_async(token_in_session) + head :no_content + end + end + end + def new @cluster = ::Clusters::Cluster.new.tap do |cluster| cluster.build_provider_gcp -- cgit v1.2.1 From d69f0feea8c846cab2019a0afe9c602b25864d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 21 Dec 2017 01:27:04 +0100 Subject: Stub out project#reset_cache --- app/controllers/projects_controller.rb | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app/controllers') diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 6f609348402..a2f1b27d0ec 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -175,6 +175,9 @@ class ProjectsController < Projects::ApplicationController ) end + def reset_cache + end + def export @project.add_export_job(current_user: current_user) -- cgit v1.2.1 From 1eb207f3c28f6a03dbd1174838a154da7e64e519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 21 Dec 2017 02:08:52 +0100 Subject: Add tests for projects#reset_cache --- app/controllers/projects_controller.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app/controllers') diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index a2f1b27d0ec..928555c200b 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -176,6 +176,12 @@ class ProjectsController < Projects::ApplicationController end def reset_cache + if ResetProjectCacheService.new(@project, current_user).execute + flash[:notice] = _("Project cache successfully reset.") + else + flash[:error] = _("Unable to reset project cache.") + end + redirect_to project_pipelines_path(@project) end def export -- cgit v1.2.1 From 59c7f46e2aa33d633fdc3f78c8a4faa792e40972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 21 Dec 2017 19:02:06 +0100 Subject: Remove actions for async GCP project billing check --- .../projects/clusters/gcp_controller.rb | 31 ---------------------- 1 file changed, 31 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 66a851c52c7..0c8305480ae 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -18,29 +18,6 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end - def check - respond_to do |format| - format.json do - Gitlab::PollingInterval.set_header(response, interval: STATUS_POLLING_INTERVAL) - - Gitlab::Redis::SharedState.with do |redis| - render json: { billing: redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) } - end - end - - format.html { render :check } - end - end - - def run_check - respond_to do |format| - format.json do - CheckGcpProjectBillingWorker.perform_async(token_in_session) - head :no_content - end - end - end - def new @cluster = ::Clusters::Cluster.new.tap do |cluster| cluster.build_provider_gcp @@ -84,14 +61,6 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end - def authorize_google_project_billing - Gitlab::Redis::SharedState.with do |redis| - unless redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) == 'true' - CheckGcpProjectBillingWorker.perform_async(token_in_session) - redirect_to action: 'check' - end - end - end def token_in_session @token_in_session ||= -- cgit v1.2.1 From e395a2c1901aa08c5d1f26f94406552db44140fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 21 Dec 2017 19:25:28 +0100 Subject: Implement GCP billing check in cluster form --- .../projects/clusters/gcp_controller.rb | 28 ++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 0c8305480ae..27c11ce554d 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,7 +1,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! before_action :authorize_google_api, except: [:login] - before_action :authorize_google_project_billing, except: [:login, :check, :run_check] + before_action :authorize_google_project_billing, only: [:new] before_action :authorize_create_cluster!, only: [:new, :create] STATUS_POLLING_INTERVAL = 1.minute.to_i @@ -25,15 +25,20 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end def create - @cluster = ::Clusters::CreateService - .new(project, current_user, create_params) - .execute(token_in_session) + case google_project_billing_status + when 'true' + @cluster = ::Clusters::CreateService + .new(project, current_user, create_params) + .execute(token_in_session) - if @cluster.persisted? - redirect_to project_cluster_path(project, @cluster) + return redirect_to project_cluster_path(project, @cluster) if @cluster.persisted? + when 'false' + flash[:error] = _('Please enable billing for one of your projects to be able to create a cluster.') else - render :new + flash[:error] = _('We could not verify that one of your projects on GCP has billing enabled. Please try again.') end + + render :new end private @@ -61,6 +66,15 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def authorize_google_project_billing + CheckGcpProjectBillingWorker.perform_async(token_in_session) + end + + def google_project_billing_status + Gitlab::Redis::SharedState.with do |redis| + redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) + end + end def token_in_session @token_in_session ||= -- cgit v1.2.1 From 896b9a6828b798ce796e0697cfa878c39c7ef829 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Tue, 26 Dec 2017 12:53:42 +0100 Subject: Fix when branch creation fails don't post system note Closes #24347 --- app/controllers/projects/branches_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index 56df9991fda..e8e9f45edee 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -46,7 +46,7 @@ class Projects::BranchesController < Projects::ApplicationController result = CreateBranchService.new(project, current_user) .execute(branch_name, ref) - if params[:issue_iid] + if params[:issue_iid] && result[:status] == :success issue = IssuesFinder.new(current_user, project_id: @project.id).find_by(iid: params[:issue_iid]) SystemNoteService.new_issue_branch(issue, @project, current_user, branch_name) if issue end -- cgit v1.2.1 From f88d5974bbc3646587a9c15e9054e63fdb746a20 Mon Sep 17 00:00:00 2001 From: Mario de la Ossa Date: Tue, 19 Dec 2017 15:24:36 -0600 Subject: Add pause/resume button to specific project runners --- app/controllers/projects/runners_controller.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb index 9f9773575a5..c950d0f7001 100644 --- a/app/controllers/projects/runners_controller.rb +++ b/app/controllers/projects/runners_controller.rb @@ -29,17 +29,17 @@ class Projects::RunnersController < Projects::ApplicationController def resume if Ci::UpdateRunnerService.new(@runner).update(active: true) - redirect_to runner_path(@runner), notice: 'Runner was successfully updated.' + redirect_to runners_path(@project), notice: 'Runner was successfully updated.' else - redirect_to runner_path(@runner), alert: 'Runner was not updated.' + redirect_to runners_path(@project), alert: 'Runner was not updated.' end end def pause if Ci::UpdateRunnerService.new(@runner).update(active: false) - redirect_to runner_path(@runner), notice: 'Runner was successfully updated.' + redirect_to runners_path(@project), notice: 'Runner was successfully updated.' else - redirect_to runner_path(@runner), alert: 'Runner was not updated.' + redirect_to runners_path(@project), alert: 'Runner was not updated.' end end -- cgit v1.2.1 From ac1b353e43b739fd946fe047f4407ecb96c17ec6 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Wed, 27 Dec 2017 18:58:46 +0100 Subject: Refactor success status in branch controller --- app/controllers/projects/branches_controller.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index e8e9f45edee..cabafe26357 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -46,14 +46,16 @@ class Projects::BranchesController < Projects::ApplicationController result = CreateBranchService.new(project, current_user) .execute(branch_name, ref) - if params[:issue_iid] && result[:status] == :success + success = (result[:status] == :success) + + if params[:issue_iid] && success issue = IssuesFinder.new(current_user, project_id: @project.id).find_by(iid: params[:issue_iid]) SystemNoteService.new_issue_branch(issue, @project, current_user, branch_name) if issue end respond_to do |format| format.html do - if result[:status] == :success + if success if redirect_to_autodeploy redirect_to url_to_autodeploy_setup(project, branch_name), notice: view_context.autodeploy_flash_notice(branch_name) @@ -67,7 +69,7 @@ class Projects::BranchesController < Projects::ApplicationController end format.json do - if result[:status] == :success + if success render json: { name: branch_name, url: project_tree_url(@project, branch_name) } else render json: result[:messsage], status: :unprocessable_entity -- cgit v1.2.1 From 6304fe44ec9b034917201db2e1bacb83d82cdeae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Sun, 31 Dec 2017 00:08:15 -0500 Subject: Allow logged in user to change his password Users were unable to change their password through the "Reset password" link that was sent to their email if they were logged in. This is due to a default controller filter from Devise that requires the user to not be logged in in order to use this link. --- app/controllers/passwords_controller.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app/controllers') diff --git a/app/controllers/passwords_controller.rb b/app/controllers/passwords_controller.rb index 68a52f40342..57761bfbe26 100644 --- a/app/controllers/passwords_controller.rb +++ b/app/controllers/passwords_controller.rb @@ -1,6 +1,8 @@ class PasswordsController < Devise::PasswordsController include Gitlab::CurrentSettings + skip_before_action :require_no_authentication, only: [:edit, :update] + before_action :resource_from_email, only: [:create] before_action :check_password_authentication_available, only: [:create] before_action :throttle_reset, only: [:create] -- cgit v1.2.1 From 176b60d11055999d56e30b6fe0581fbede2740c4 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Thu, 4 Jan 2018 18:38:39 +0100 Subject: Remove the Project#repo method --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 6f609348402..6f229b08c0c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -353,7 +353,7 @@ class ProjectsController < Projects::ApplicationController end def repo_exists? - project.repository_exists? && !project.empty_repo? && project.repo + project.repository_exists? && !project.empty_repo? rescue Gitlab::Git::Repository::NoRepository project.repository.expire_exists_cache -- cgit v1.2.1 From f834e2907d5111f3e2bcd8d0dd126f9e0dd0be7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 4 Jan 2018 19:13:30 +0100 Subject: Move cache reset to ci_cd_settings controller --- app/controllers/projects/settings/ci_cd_controller.rb | 9 +++++++++ app/controllers/projects_controller.rb | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index b029b31f9af..1dcebcb15a6 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -11,6 +11,15 @@ module Projects define_auto_devops_variables end + def reset_cache + if ResetProjectCacheService.new(@project, current_user).execute + flash[:notice] = _("Project cache successfully reset.") + else + flash[:error] = _("Unable to reset project cache.") + end + redirect_to project_pipelines_path(@project) + end + private def define_runners_variables diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 928555c200b..6f609348402 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -175,15 +175,6 @@ class ProjectsController < Projects::ApplicationController ) end - def reset_cache - if ResetProjectCacheService.new(@project, current_user).execute - flash[:notice] = _("Project cache successfully reset.") - else - flash[:error] = _("Unable to reset project cache.") - end - redirect_to project_pipelines_path(@project) - end - def export @project.add_export_job(current_user: current_user) -- cgit v1.2.1 From 7d7d289b159fba332c68dc66b6f9f3b17428c3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Thu, 4 Jan 2018 19:14:37 +0100 Subject: Add missing empty line in #reset_cache --- app/controllers/projects/settings/ci_cd_controller.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'app/controllers') diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 1dcebcb15a6..86717bb7242 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -17,6 +17,7 @@ module Projects else flash[:error] = _("Unable to reset project cache.") end + redirect_to project_pipelines_path(@project) end -- cgit v1.2.1 From b4e9e07cdd5cbfdcbcf93c56a3b0b005602b40fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Fri, 5 Jan 2018 00:09:33 +0100 Subject: Remove polling interval from GcpController --- app/controllers/projects/clusters/gcp_controller.rb | 2 -- 1 file changed, 2 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 27c11ce554d..93b44623d3c 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -4,8 +4,6 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_google_project_billing, only: [:new] before_action :authorize_create_cluster!, only: [:new, :create] - STATUS_POLLING_INTERVAL = 1.minute.to_i - def login begin state = generate_session_key_redirect(gcp_new_namespace_project_clusters_path.to_s) -- cgit v1.2.1 From 27a75ea1757d1c1b67bf501ec333221ed5e92d04 Mon Sep 17 00:00:00 2001 From: Jan Provaznik Date: Wed, 20 Dec 2017 10:01:21 +0100 Subject: Backport 'Rebase' feature from EE to CE When a project uses fast-forward merging strategy user has to rebase MRs to target branch before it can be merged. Now user can do rebase in UI by clicking 'Rebase' button instead of doing rebase locally. This feature was already present in EE, this is only backport of the feature to CE. Couple of changes: * removed rebase license check * renamed migration (changed timestamp) Closes #40301 --- app/controllers/projects/merge_requests_controller.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'app/controllers') diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 6b59c8461a3..2e8a738b6d9 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -10,6 +10,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action :authorize_update_issuable!, only: [:close, :edit, :update, :remove_wip, :sort] before_action :set_issuables_index, only: [:index] before_action :authenticate_user!, only: [:assign_related_issues] + before_action :check_user_can_push_to_source_branch!, only: [:rebase] def index @merge_requests = @issuables @@ -223,6 +224,12 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo render json: environments end + def rebase + RebaseWorker.perform_async(@merge_request.id, current_user.id) + + render nothing: true, status: 200 + end + protected alias_method :subscribable_resource, :merge_request @@ -322,4 +329,14 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo @finder_type = MergeRequestsFinder super end + + def check_user_can_push_to_source_branch! + return access_denied! unless @merge_request.source_branch_exists? + + access_check = ::Gitlab::UserAccess + .new(current_user, project: @merge_request.source_project) + .can_push_to_branch?(@merge_request.source_branch) + + access_denied! unless access_check + end end -- cgit v1.2.1 From 06d4f07a041a70fe9462bcae47b1b191908347ab Mon Sep 17 00:00:00 2001 From: Felipe Artur Date: Tue, 26 Dec 2017 17:16:43 -0200 Subject: Improve filtering issues by label performance --- app/controllers/concerns/issues_action.rb | 2 -- app/controllers/concerns/merge_requests_action.rb | 1 - 2 files changed, 3 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/concerns/issues_action.rb b/app/controllers/concerns/issues_action.rb index d4cccbe6442..3ba1235cee0 100644 --- a/app/controllers/concerns/issues_action.rb +++ b/app/controllers/concerns/issues_action.rb @@ -5,8 +5,6 @@ module IssuesAction # rubocop:disable Gitlab/ModuleWithInstanceVariables def issues @finder_type = IssuesFinder - @label = finder.labels.first - @issues = issuables_collection .non_archived .page(params[:page]) diff --git a/app/controllers/concerns/merge_requests_action.rb b/app/controllers/concerns/merge_requests_action.rb index 4d44df3bba9..a9cc13038bf 100644 --- a/app/controllers/concerns/merge_requests_action.rb +++ b/app/controllers/concerns/merge_requests_action.rb @@ -5,7 +5,6 @@ module MergeRequestsAction # rubocop:disable Gitlab/ModuleWithInstanceVariables def merge_requests @finder_type = MergeRequestsFinder - @label = finder.labels.first @merge_requests = issuables_collection.page(params[:page]) -- cgit v1.2.1 From d13be3c2d98071234790e2fe11d180e8b7b13b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sat, 6 Jan 2018 19:41:49 +0100 Subject: Store OAuth token in Redis for worker to pick up --- app/controllers/projects/clusters/gcp_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 93b44623d3c..41b25ed1325 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -65,7 +65,12 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end def authorize_google_project_billing - CheckGcpProjectBillingWorker.perform_async(token_in_session) + redis_token_key = CheckGcpProjectBillingWorker.generate_redis_token_key + Gitlab::Redis::SharedState.with do |redis| + redis.set(redis_token_key, token_in_session, ex: 5.minutes) + end + + CheckGcpProjectBillingWorker.perform_async(redis_token_key) end def google_project_billing_status -- cgit v1.2.1 From e7a8564f39a46a5fa5f34f798b890c0a62ff12e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Sun, 7 Jan 2018 16:18:53 +0100 Subject: Refactor GCP session token exchange scheme --- app/controllers/projects/clusters/gcp_controller.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 41b25ed1325..25608df0b9c 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -65,11 +65,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end def authorize_google_project_billing - redis_token_key = CheckGcpProjectBillingWorker.generate_redis_token_key - Gitlab::Redis::SharedState.with do |redis| - redis.set(redis_token_key, token_in_session, ex: 5.minutes) - end - + redis_token_key = CheckGcpProjectBillingWorker.store_session_token(token_in_session) CheckGcpProjectBillingWorker.perform_async(redis_token_key) end -- cgit v1.2.1 From 66ebb206b09f83288ee6acbd6d11b2963ae43c9b Mon Sep 17 00:00:00 2001 From: Christiaan Van den Poel Date: Mon, 8 Jan 2018 09:06:25 +0000 Subject: disables the shortcut to the issue boards when issues are disabled --- app/controllers/projects/application_controller.rb | 4 ++++ app/controllers/projects/boards_controller.rb | 1 + app/controllers/projects/issues_controller.rb | 4 ---- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 9e79852e378..6025a40348b 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -86,4 +86,8 @@ class Projects::ApplicationController < ApplicationController def require_pages_enabled! not_found unless @project.pages_available? end + + def check_issues_available! + return render_404 unless @project.feature_available?(:issues, current_user) + end end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index e36105ddc11..949e54ff819 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -2,6 +2,7 @@ class Projects::BoardsController < Projects::ApplicationController include BoardsResponses include IssuableCollections + before_action :check_issues_available! before_action :authorize_read_board!, only: [:index, :show] before_action :assign_endpoint_vars diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index d7a3441a245..384f18b316c 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -194,10 +194,6 @@ class Projects::IssuesController < Projects::ApplicationController render_404 unless can?(current_user, :push_code, @project) && @issue.can_be_worked_on?(current_user) end - def check_issues_available! - return render_404 unless @project.feature_available?(:issues, current_user) - end - def render_issue_json if @issue.valid? render json: serializer.represent(@issue) -- cgit v1.2.1