diff options
Diffstat (limited to 'lib/gitlab_post_receive.rb')
-rw-r--r-- | lib/gitlab_post_receive.rb | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/lib/gitlab_post_receive.rb b/lib/gitlab_post_receive.rb index 00a1b1b..aca1ee2 100644 --- a/lib/gitlab_post_receive.rb +++ b/lib/gitlab_post_receive.rb @@ -20,29 +20,20 @@ class GitlabPostReceive end def exec - result = update_redis + response = GitlabMetrics.measure("post-receive") do + api.post_receive(gl_repository, @actor, changes) + end - begin - broadcast_message = GitlabMetrics.measure("broadcast-message") do - api.broadcast_message - end + return false unless response - if broadcast_message.has_key?("message") - puts - print_broadcast_message(broadcast_message["message"]) - end + print_broadcast_message(response['broadcast_message']) if response['broadcast_message'] + print_merge_request_links(response['merge_request_urls']) if response['merge_request_urls'] - merge_request_urls = GitlabMetrics.measure("merge-request-urls") do - api.merge_request_urls(@gl_repository, @repo_path, @changes) - end - print_merge_request_links(merge_request_urls) - - api.notify_post_receive(gl_repository, repo_path) - rescue GitlabNet::ApiUnreachableError - nil - end - - result && GitlabReferenceCounter.new(repo_path).decrease + response['reference_counter_decreased'] + rescue GitlabNet::ApiUnreachableError + false + rescue GitlabNet::NotFound + fallback_post_receive end protected @@ -89,6 +80,7 @@ class GitlabPostReceive # message.scan returns a nested array of capture groups, so flatten. lines = message.scan(/(.{,#{text_width}})(?:\s|$)/)[0...-1].flatten + puts puts "=" * total_width puts @@ -127,4 +119,31 @@ class GitlabPostReceive false end end + + private + + def fallback_post_receive + result = update_redis + + begin + broadcast_message = GitlabMetrics.measure("broadcast-message") do + api.broadcast_message + end + + if broadcast_message.has_key?("message") + print_broadcast_message(broadcast_message["message"]) + end + + merge_request_urls = GitlabMetrics.measure("merge-request-urls") do + api.merge_request_urls(@gl_repository, @repo_path, @changes) + end + print_merge_request_links(merge_request_urls) + + api.notify_post_receive(gl_repository, repo_path) + rescue GitlabNet::ApiUnreachableError + nil + end + + result && GitlabReferenceCounter.new(repo_path).decrease + end end |