summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2015-11-24 13:35:07 +0200
committerValery Sizov <valery@gitlab.com>2015-11-27 14:47:09 +0200
commit255e7eb23bd11d1c3c2c3ee8a972a8404b96a0e7 (patch)
tree32e854357cde0d192524a47e1e5bbfd4f93b47c7
parent8f4b6d51f0c55fcbef8e53e2994b9f2b21069d1d (diff)
downloadgitlab-ce-upload_hook.tar.gz
Fire update hook from GitLabupload_hook
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/repository.rb10
-rw-r--r--lib/gitlab/git/hook.rb17
3 files changed, 25 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 39a57231d9c..c39cb77091a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ v 8.3.0 (unreleased)
- Fix 500 error when update group member permission
- Fix: Raw private snippets access workflow
- Trim leading and trailing whitespace of milestone and issueable titles (Jose Corcuera)
+ - Fire update hook from GitLab
v 8.2.1
- Forcefully update builds that didn't want to update with state machine
diff --git a/app/models/repository.rb b/app/models/repository.rb
index c1836103463..d247b0f5012 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -571,9 +571,13 @@ class Repository
# Run GitLab pre-receive hook
pre_receive_hook = Gitlab::Git::Hook.new('pre-receive', path_to_repo)
- status = pre_receive_hook.trigger(gl_id, oldrev, newrev, ref)
+ pre_receive_hook_status = pre_receive_hook.trigger(gl_id, oldrev, newrev, ref)
- if status
+ # Run GitLab update hook
+ update_hook = Gitlab::Git::Hook.new('update', path_to_repo)
+ update_hook_status = update_hook.trigger(gl_id, oldrev, newrev, ref)
+
+ if pre_receive_hook_status && update_hook_status
if was_empty
# Create branch
rugged.references.create(ref, newrev)
@@ -596,7 +600,7 @@ class Repository
# Remove tmp ref and return error to user
rugged.references.delete(tmp_ref)
- raise PreReceiveError.new('Commit was rejected by pre-receive hook')
+ raise PreReceiveError.new('Commit was rejected by git hook')
end
end
diff --git a/lib/gitlab/git/hook.rb b/lib/gitlab/git/hook.rb
index dd393fe09d2..c89dd462a31 100644
--- a/lib/gitlab/git/hook.rb
+++ b/lib/gitlab/git/hook.rb
@@ -14,6 +14,17 @@ module Gitlab
end
def trigger(gl_id, oldrev, newrev, ref)
+ case name
+ when "pre-receive", "post-receive"
+ call_receive_hook(gl_id, oldrev, newrev, ref)
+ when "update"
+ call_update_hook(gl_id, oldrev, newrev, ref)
+ end
+ end
+
+ private
+
+ def call_receive_hook(gl_id, oldrev, newrev, ref)
return true unless exists?
changes = [oldrev, newrev, ref].join(" ")
@@ -54,6 +65,12 @@ module Gitlab
exit_status
end
+
+ def call_update_hook(gl_id, oldrev, newrev, ref)
+ Dir.chdir(repo_path) do
+ system({ 'GL_ID' => gl_id }, path, ref, oldrev, newrev)
+ end
+ end
end
end
end