From 3ef7cdf9f94035da5640a585b8c49b0693af2090 Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Wed, 29 Oct 2014 22:21:10 -0500 Subject: Support for custom hooks --- lib/gitlab_custom_hook.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib/gitlab_custom_hook.rb (limited to 'lib/gitlab_custom_hook.rb') diff --git a/lib/gitlab_custom_hook.rb b/lib/gitlab_custom_hook.rb new file mode 100644 index 0000000..d6fa83d --- /dev/null +++ b/lib/gitlab_custom_hook.rb @@ -0,0 +1,42 @@ +class GitlabCustomHook + def pre_receive(refs, repo_path) + if receive('pre-receive', refs, repo_path) + return true + else + # reset GL_ID env since we stop git push here + ENV['GL_ID'] = nil + return false + end + end + + def post_receive(refs, repo_path) + receive('post-receive', refs, repo_path) + end + + def update(ref_name, old_value, new_value, repo_path) + hook = hook_file('update', repo_path) + return true if hook.nil? + system(*hook, ref_name, old_value, new_value) ? true : false + end + + private + + def receive(type, refs, repo_path) + unless type == 'pre-receive' || type == 'post-receive' + puts 'GitLab: An unexpected error occurred ' \ + '(invalid pre/post-receive hook type)' + return false + end + + hook = hook_file(type, repo_path) + return true if hook.nil? + cmd = "#{hook} #{refs}" + system(*cmd) ? true : false + end + + def hook_file(hook_type, repo_path) + hook_path = File.join(repo_path.strip, 'custom_hooks') + hook_file = "#{hook_path}/#{hook_type}" + hook_file if File.exist?(hook_file) + end +end -- cgit v1.2.1