diff options
author | tiagonbotelho <tiagonbotelho@hotmail.com> | 2016-08-30 13:12:43 +0300 |
---|---|---|
committer | tiagonbotelho <tiagonbotelho@hotmail.com> | 2016-08-31 21:02:21 +0300 |
commit | 4091c47f7278ccdfb2242ec9480d9e5d31294b1e (patch) | |
tree | ec2885ccd9e5d1e4132a52774100412b760a84a0 /app | |
parent | 3a314b9d6f4356a3e0711d4683dbdefd05ec5647 (diff) |
user cannot create/accept merge requests when size limit has been exceeded
Diffstat (limited to 'app')
5 files changed, 38 insertions, 3 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 4f5f3b6aa09..d267661cff4 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -295,6 +295,12 @@ class Projects::MergeRequestsController < Projects::ApplicationController def merge return access_denied! unless @merge_request.can_be_merged_by?(current_user) + # user is not able to merge if project is above size limit + if @merge_request.target_project.above_size_limit? + @status = :size_limit_reached + return + end + # Disable the CI check if merge_when_build_succeeds is enabled since we have # to wait until CI completes to know unless @merge_request.mergeable?(skip_ci_check: merge_when_build_succeeds_active?) diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index ba424b09463..55bee838ea7 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -35,6 +35,12 @@ module MergeRequests end end + def render_size_limit_message(project_size, project_size_remaining) + repository_size_limit = Gitlab::CurrentSettings.current_application_settings.repository_size_limit + + "The target's repository size (#{project_size}MB) exceeds the limit of #{repository_size_limit}MB by #{project_size_remaining}MB" + end + private def filter_params diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 290742f1506..43e7cd505eb 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -13,15 +13,24 @@ module MergeRequests merge_request.target_project ||= (project.forked_from_project || project) merge_request.target_branch ||= merge_request.target_project.default_branch + if merge_request.target_project.above_size_limit? + message = render_size_limit_message(merge_request.target_project.repository_size, + merge_request.target_project.size_to_remove) + + merge_request.errors.add(:base, message) + end + if merge_request.target_branch.blank? || merge_request.source_branch.blank? message = if params[:source_branch] || params[:target_branch] "You must select source and target branch" end - return build_failed(merge_request, message) + merge_request.errors.add(:base, message) unless message.nil? end + return build_failed(merge_request) if invalid?(merge_request) + compare = CompareService.new.execute( merge_request.source_project, merge_request.source_branch, @@ -92,8 +101,13 @@ module MergeRequests merge_request end - def build_failed(merge_request, message) - merge_request.errors.add(:base, message) unless message.nil? + def invalid?(merge_request) + merge_request.target_project.above_size_limit? || + merge_request.target_project.blank? || + merge_request.source_branch.blank? + end + + def build_failed(merge_request) merge_request.compare_commits = [] merge_request.can_be_created = false merge_request diff --git a/app/views/projects/merge_requests/merge.js.haml b/app/views/projects/merge_requests/merge.js.haml index 84b6c9ebc5c..92a2a9c548d 100644 --- a/app/views/projects/merge_requests/merge.js.haml +++ b/app/views/projects/merge_requests/merge.js.haml @@ -8,6 +8,9 @@ - when :sha_mismatch :plain $('.mr-widget-body').html("#{escape_javascript(render('projects/merge_requests/widget/open/sha_mismatch'))}"); +- when :size_limit_reached + :plain + $('.mr-widget-body').html("#{escape_javascript(render('projects/merge_requests/widget/open/size_limit_reached'))}"); - else :plain $('.mr-widget-body').html("#{escape_javascript(render('projects/merge_requests/widget/open/reload'))}"); diff --git a/app/views/projects/merge_requests/widget/open/_size_limit_reached.html.haml b/app/views/projects/merge_requests/widget/open/_size_limit_reached.html.haml new file mode 100644 index 00000000000..6aa2a9393de --- /dev/null +++ b/app/views/projects/merge_requests/widget/open/_size_limit_reached.html.haml @@ -0,0 +1,6 @@ +%h4.size-limit-reached + = icon("exclamation-triangle") + This repository has reached it's size limit + +%p + Please contact your GitLab administrator for more information |