diff options
author | Alejandro RodrÃguez <alejorro70@gmail.com> | 2017-08-30 19:31:24 -0300 |
---|---|---|
committer | Alejandro RodrÃguez <alejorro70@gmail.com> | 2017-08-30 19:31:24 -0300 |
commit | 58df68e34e89d21884f0374ff969d742009998a4 (patch) | |
tree | b0e0452c6934ce5014124c58d2819fed15289bfd /lib | |
parent | e358cf251a1916284033c4af6f9c75495ad1e2a7 (diff) | |
download | gitlab-shell-58df68e34e89d21884f0374ff969d742009998a4.tar.gz |
Support new /internal/post-receive API endpoint
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab_net.rb | 14 | ||||
-rw-r--r-- | lib/gitlab_post_receive.rb | 59 |
2 files changed, 53 insertions, 20 deletions
diff --git a/lib/gitlab_net.rb b/lib/gitlab_net.rb index 3acebea..b48f655 100644 --- a/lib/gitlab_net.rb +++ b/lib/gitlab_net.rb @@ -11,6 +11,7 @@ require_relative 'httpunix' class GitlabNet class ApiUnreachableError < StandardError; end + class NotFound < StandardError; end CHECK_TIMEOUT = 5 READ_TIMEOUT = 300 @@ -112,6 +113,19 @@ class GitlabNet false end + def post_receive(gl_repository, identifier, changes) + params = { + gl_repository: gl_repository, + identifier: identifier, + changes: changes + } + resp = post("#{host}/post_receive", params) + + raise NotFound if resp.code == '404' + + JSON.parse(resp.body) if resp.code == '200' + end + def redis_client redis_config = config.redis database = redis_config['database'] || 0 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 |