cf58271e11
We only know the tag SHA after we create the tag. This means that we pass a different value to the hooks that happen before creating the tag, and a different value to the hooks that happen after creating the tag. This is not an ideal situation, but it is a trade-off we decided to make. For discussion of the alternatives please refer to https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7700#note_18982873 "pre-receive" and "update" hooks always get the SHA of the commit that the tag points to. "post-receive" gets the tag SHA if it is an annotated tag or the commit SHA if it is an lightweight tag. Currently we always create annotated tags if UI is used.
32 lines
664 B
Ruby
32 lines
664 B
Ruby
class GitHooksService
|
|
PreReceiveError = Class.new(StandardError)
|
|
|
|
attr_accessor :oldrev, :newrev, :ref
|
|
|
|
def execute(user, repo_path, oldrev, newrev, ref)
|
|
@repo_path = repo_path
|
|
@user = Gitlab::GlId.gl_id(user)
|
|
@oldrev = oldrev
|
|
@newrev = newrev
|
|
@ref = ref
|
|
|
|
%w(pre-receive update).each do |hook_name|
|
|
status, message = run_hook(hook_name)
|
|
|
|
unless status
|
|
raise PreReceiveError, message
|
|
end
|
|
end
|
|
|
|
yield self
|
|
|
|
run_hook('post-receive')
|
|
end
|
|
|
|
private
|
|
|
|
def run_hook(name)
|
|
hook = Gitlab::Git::Hook.new(name, @repo_path)
|
|
hook.trigger(@user, oldrev, newrev, ref)
|
|
end
|
|
end
|