summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-06 12:26:58 +0200
committerDouwe Maan <douwe@gitlab.com>2015-04-06 13:08:47 +0200
commit8f0f67622971d1861769a9deac6b102c9fdaed42 (patch)
tree8c1d3e3a75bb0fad6072323a1b92594ae4a707f8
parent63efd0927224a7b3a6df7b83d452baab443d3d90 (diff)
downloadgitlab-shell-8f0f67622971d1861769a9deac6b102c9fdaed42.tar.gz
Write GitlabAccess error to stderr.
-rwxr-xr-xhooks/pre-receive3
-rw-r--r--lib/gitlab_access.rb21
2 files changed, 13 insertions, 11 deletions
diff --git a/hooks/pre-receive b/hooks/pre-receive
index 7f9c0c0..7e23974 100755
--- a/hooks/pre-receive
+++ b/hooks/pre-receive
@@ -14,5 +14,8 @@ if GitlabAccess.new(repo_path, key_id, refs).exec &&
GitlabCustomHook.new.pre_receive(refs, repo_path)
exit 0
else
+ # reset GL_ID env since we stop git push here
+ ENV['GL_ID'] = nil
+
exit 1
end
diff --git a/lib/gitlab_access.rb b/lib/gitlab_access.rb
index 22343fd..5816969 100644
--- a/lib/gitlab_access.rb
+++ b/lib/gitlab_access.rb
@@ -5,6 +5,8 @@ require_relative 'names_helper'
require 'json'
class GitlabAccess
+ class AccessDeniedError < StandardError; end
+
include NamesHelper
attr_reader :config, :repo_path, :repo_name, :changes
@@ -18,19 +20,16 @@ class GitlabAccess
end
def exec
- begin
- status = api.check_access('git-receive-pack', @repo_name, @actor, @changes)
-
- return true if status.allowed?
+ status = api.check_access('git-receive-pack', @repo_name, @actor, @changes)
- message = status.message
- rescue GitlabNet::ApiUnreachableError
- message = "Failed to authorize your Git request: internal API unreachable"
- end
+ raise AccessDeniedError, status.message unless status.allowed?
- # reset GL_ID env since we stop git push here
- ENV['GL_ID'] = nil
- puts "GitLab: #{message}"
+ true
+ rescue GitlabNet::ApiUnreachableError
+ $stderr.puts "GitLab: Failed to authorize your Git request: internal API unreachable"
+ false
+ rescue AccessDeniedError => ex
+ $stderr.puts "GitLab: #{ex.message}"
false
end