diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-04-06 12:26:58 +0200 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-04-06 13:08:47 +0200 |
commit | 8f0f67622971d1861769a9deac6b102c9fdaed42 (patch) | |
tree | 8c1d3e3a75bb0fad6072323a1b92594ae4a707f8 | |
parent | 63efd0927224a7b3a6df7b83d452baab443d3d90 (diff) | |
download | gitlab-shell-8f0f67622971d1861769a9deac6b102c9fdaed42.tar.gz |
Write GitlabAccess error to stderr.
-rwxr-xr-x | hooks/pre-receive | 3 | ||||
-rw-r--r-- | lib/gitlab_access.rb | 21 |
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 |