summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-14 14:02:18 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-14 14:02:18 +0200
commit12331a552b5921d6d212db774360a8f154fbffb0 (patch)
treedbcd2ec80f1ec70a5e92ba97bdcf5ae743da489c
parentba68af63031a396df644807e1a428b5364f457da (diff)
downloadgitlab-shell-12331a552b5921d6d212db774360a8f154fbffb0.tar.gz
Use update hook to add post event to redis. Use GL_ID instead of GL_USER
-rw-r--r--CHANGELOG5
-rwxr-xr-xhooks/post-receive13
-rwxr-xr-xhooks/update2
-rw-r--r--lib/gitlab_shell.rb2
-rw-r--r--lib/gitlab_update.rb46
5 files changed, 41 insertions, 27 deletions
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..968da00
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,5 @@
+v1.0.4
+ - requires gitlab b698094
+ - dont use post-receive file any more. Make all updates in update
+ - fixed issue with invalid GL_USER
+ - use GL_ID instead of GL_USER
diff --git a/hooks/post-receive b/hooks/post-receive
index ebd9e1a..acb1e40 100755
--- a/hooks/post-receive
+++ b/hooks/post-receive
@@ -1,11 +1,6 @@
-#!/usr/bin/env bash
+#!/usr/bin/env ruby
-# This file was placed here by GitLab. It makes sure that your pushed commits
-# will be processed properly.
+# This file was placed here by GitLab.
+# IT IS DEPRECATED NOW.
+# All GitLab logic handled by update hook
-while read oldrev newrev ref
-do
- # For every branch or tag that was pushed, create a Resque job in redis.
- repo_path=`pwd`
- env -i redis-cli rpush "resque:gitlab:queue:post_receive" "{\"class\":\"PostReceive\",\"args\":[\"$repo_path\",\"$oldrev\",\"$newrev\",\"$ref\",\"$GL_USER\"]}" > /dev/null 2>&1
-done
diff --git a/hooks/update b/hooks/update
index f483cc0..39ea196 100755
--- a/hooks/update
+++ b/hooks/update
@@ -4,7 +4,7 @@
# will be processed properly.
refname = ARGV[0]
-key_id = ENV['GL_USER']
+key_id = ENV['GL_ID']
repo_path = `pwd`
require_relative '../lib/gitlab_update'
diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb
index d821299..842714e 100644
--- a/lib/gitlab_shell.rb
+++ b/lib/gitlab_shell.rb
@@ -16,7 +16,7 @@ class GitlabShell
parse_cmd
if git_cmds.include?(@git_cmd)
- ENV['GL_USER'] = @key_id
+ ENV['GL_ID'] = @key_id
if validate_access
process_cmd
diff --git a/lib/gitlab_update.rb b/lib/gitlab_update.rb
index 7bbb288..d6d135b 100644
--- a/lib/gitlab_update.rb
+++ b/lib/gitlab_update.rb
@@ -3,33 +3,38 @@ require_relative 'gitlab_net'
class GitlabUpdate
def initialize(repo_path, key_id, refname)
+ @repo_path = repo_path.strip
@repo_name = repo_path
@repo_name.gsub!(GitlabConfig.new.repos_path.to_s, "")
@repo_name.gsub!(/.git$/, "")
@repo_name.gsub!(/^\//, "")
@key_id = key_id
- @refname = /refs\/heads\/([\w\.-]+)/.match(refname).to_a.last
+ @refname = refname
+ @branch_name = /refs\/heads\/([\w\.-]+)/.match(refname).to_a.last
+
+ @oldrev = ARGV[1]
+ @newrev = ARGV[2]
end
def exec
- # Skip update hook for local push when key_id is nil
- # It required for gitlab instance to make local pushes
- # without validation of access
- exit 0 if @key_id.nil?
-
- # Also skip update hook for non-gitlab keys
- # and reset GL_USER env
- unless @key_id =~ /\Akey\-\d+\Z/
- ENV['GL_USER'] = nil
- exit 0
- end
+ # reset GL_USER env since we already
+ # get value from it
+ ENV['GL_ID'] = nil
- if api.allowed?('git-receive-pack', @repo_name, @key_id, @refname)
- exit 0
+ # If its push over ssh
+ # we need to check user persmission per branch first
+ if ssh?
+ if api.allowed?('git-receive-pack', @repo_name, @key_id, @branch_name)
+ update_redis
+ exit 0
+ else
+ puts "GitLab: You are not allowed to access #{@branch_name}! "
+ exit 1
+ end
else
- puts "GitLab: You are not allowed to access #{@refname}! "
- exit 1
+ update_redis
+ exit 0
end
end
@@ -38,4 +43,13 @@ class GitlabUpdate
def api
GitlabNet.new
end
+
+ def ssh?
+ @key_id =~ /\Akey\-\d+\Z/
+ end
+
+ def update_redis
+ command = "env -i redis-cli rpush 'resque:gitlab:queue:post_receive' '{\"class\":\"PostReceive\",\"args\":[\"#{@repo_path}\",\"#{@oldrev}\",\"#{@newrev}\",\"#{@refname}\",\"#{@key_id}\"]}' > /dev/null 2>&1"
+ system(command)
+ end
end