summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gitlab_access.rb5
-rw-r--r--lib/gitlab_access_status.rb16
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