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:
authortiagonbotelho <tiagonbotelho@hotmail.com>2016-08-30 13:12:43 +0300
committertiagonbotelho <tiagonbotelho@hotmail.com>2016-08-31 21:02:21 +0300
commit4091c47f7278ccdfb2242ec9480d9e5d31294b1e (patch)
treeec2885ccd9e5d1e4132a52774100412b760a84a0 /app
parent3a314b9d6f4356a3e0711d4683dbdefd05ec5647 (diff)
user cannot create/accept merge requests when size limit has been exceeded
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/merge_requests_controller.rb6
-rw-r--r--app/services/merge_requests/base_service.rb6
-rw-r--r--app/services/merge_requests/build_service.rb20
-rw-r--r--app/views/projects/merge_requests/merge.js.haml3
-rw-r--r--app/views/projects/merge_requests/widget/open/_size_limit_reached.html.haml6
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