summaryrefslogtreecommitdiff
path: root/lib/gitlab_post_receive.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab_post_receive.rb')
-rw-r--r--lib/gitlab_post_receive.rb59
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