diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab_access.rb | 5 | ||||
-rw-r--r-- | lib/gitlab_access_status.rb | 16 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/gitlab_access.rb b/lib/gitlab_access.rb index 04806b2..8e3c74f 100644 --- a/lib/gitlab_access.rb +++ b/lib/gitlab_access.rb @@ -6,6 +6,7 @@ require 'json' class GitlabAccess class AccessDeniedError < StandardError; end + class MemoryLimitReachedError < StandardError; end include NamesHelper @@ -24,6 +25,7 @@ class GitlabAccess status = api.check_access('git-receive-pack', @repo_name, @actor, @changes, @protocol) raise AccessDeniedError, status.message unless status.allowed? + raise MemoryLimitReachedError, status.memory_message if status.memory_limit? true rescue GitlabNet::ApiUnreachableError @@ -32,6 +34,9 @@ class GitlabAccess rescue AccessDeniedError => ex $stderr.puts "GitLab: #{ex.message}" false + rescue MemoryLimitReachedError => ex + $stderr.puts "Gitlab: Project has reached the memory limit by: #{ex.message}MB please free some memory in Gitlab's UI to be able to push." + false end protected diff --git a/lib/gitlab_access_status.rb b/lib/gitlab_access_status.rb index 7fb88be..4b9d32a 100644 --- a/lib/gitlab_access_status.rb +++ b/lib/gitlab_access_status.rb @@ -1,20 +1,30 @@ require 'json' class GitAccessStatus - attr_reader :message, :repository_path + attr_reader :message, :repository_path, :memory_status, :memory_message - def initialize(status, message, repository_path) + def initialize(status, message, repository_path, memory = nil) @status = status @message = message @repository_path = repository_path + + if memory + @memory_status = memory["status"] + @memory_message = memory["message"] + end end def self.create_from_json(json) values = JSON.parse(json) - self.new(values["status"], values["message"], values["repository_path"]) + self.new(values["status"], values["message"], + values["repository_path"], values["memory"]) end def allowed? @status end + + def memory_limit? + @memory_status + end end |