Skip to content

Commit

Permalink
Merge branch 'upload_hook' into 'master'
Browse files Browse the repository at this point in the history
Fire update hook from GitLab

https://gitlab.com/gitlab-org/gitlab-ce/issues/3069

See merge request !1882
  • Loading branch information
vsizov authored and rspeicher committed Nov 30, 2015
1 parent 45f1560 commit 49db8b7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -6,6 +6,7 @@ v 8.2.2
- Fix Error 500 when viewing user's personal projects from admin page (Stan Hu)
- Fix: Raw private snippets access workflow
- Prevent "413 Request entity too large" errors when pushing large files with LFS
- Ensure GitLab fires custom update hooks after commit via UI

v 8.2.1
- Forcefully update builds that didn't want to update with state machine
Expand Down
10 changes: 7 additions & 3 deletions app/models/repository.rb
Expand Up @@ -571,9 +571,13 @@ def commit_with_hooks(current_user, branch)

# 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)
Expand All @@ -596,7 +600,7 @@ def commit_with_hooks(current_user, branch)
# 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

Expand Down
17 changes: 17 additions & 0 deletions lib/gitlab/git/hook.rb
Expand Up @@ -16,6 +16,17 @@ def exists?
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
Expand Down Expand Up @@ -54,6 +65,12 @@ def trigger(gl_id, oldrev, newrev, ref)

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

0 comments on commit 49db8b7

Please sign in to comment.