summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2015-12-01 00:31:42 -0800
committerStan Hu <stanhu@gmail.com>2015-12-01 00:31:42 -0800
commit9b10701258d2aadbc1392c1cd7072584c8642ada (patch)
treed6024adb8b4fa06d369266ac627f66a4f7a82e66
parenta518879a6fe606630b225ccfc4f489b3b0d58adf (diff)
parent13c6096e42e5b20039f78b9415bea82e1f2507eb (diff)
downloadgitlab-ce-9b10701258d2aadbc1392c1cd7072584c8642ada.tar.gz
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce
-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 d095bb59324..db812796b69 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ v 8.3.0 (unreleased)
- Fix 500 error when update group member permission
- Trim leading and trailing whitespace of milestone and issueable titles (Jose Corcuera)
- Add ignore whitespace change option to commit view
+ - Fire update hook from GitLab
v 8.2.2
- Fix 404 in redirection after removing a project (Stan Hu)
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..07b856ca64c 100644
--- a/lib/gitlab/git/hook.rb
+++ b/lib/gitlab/git/hook.rb
@@ -16,6 +16,17 @@ module Gitlab
def trigger(gl_id, oldrev, newrev, ref)
return true unless exists?
+ 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)
changes = [oldrev, newrev, ref].join(" ")
# function will return true if succesful
@@ -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