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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-31 21:07:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-31 21:07:42 +0300
commit580622bdb3c762a8e89facd8a3946881ee480442 (patch)
tree3ac9d759da23f78f95f50684bd238a9f76839538 /lib/gitlab/repository_size_checker.rb
parentb211a4ea14d5e9ed9b0c248a4e8c5c1d85b542cb (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/repository_size_checker.rb')
-rw-r--r--lib/gitlab/repository_size_checker.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/gitlab/repository_size_checker.rb b/lib/gitlab/repository_size_checker.rb
new file mode 100644
index 00000000000..cf1af844439
--- /dev/null
+++ b/lib/gitlab/repository_size_checker.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module Gitlab
+ # Centralized class for repository size related calculations.
+ class RepositorySizeChecker
+ attr_reader :limit
+
+ def initialize(current_size_proc:, limit:, enabled: true)
+ @current_size_proc = current_size_proc
+ @limit = limit
+ @enabled = enabled && limit != 0
+ end
+
+ def current_size
+ @current_size ||= @current_size_proc.call
+ end
+
+ def enabled?
+ @enabled
+ end
+
+ def above_size_limit?
+ return false unless enabled?
+
+ current_size > limit
+ end
+
+ # @param change_size [int] in bytes
+ def changes_will_exceed_size_limit?(change_size)
+ return false unless enabled?
+
+ change_size > limit || exceeded_size(change_size) > 0
+ end
+
+ # @param change_size [int] in bytes
+ def exceeded_size(change_size = 0)
+ current_size + change_size - limit
+ end
+
+ def error_message
+ @error_message_object ||= Gitlab::RepositorySizeErrorMessage.new(self)
+ end
+ end
+end