|
| 1 | +include ActionView::Helpers::TextHelper |
| 2 | + |
1 | 3 | class GitoliteHooksController < ApplicationController
|
2 | 4 |
|
3 | 5 | skip_before_filter :verify_authenticity_token, :check_if_login_required, :except => :test
|
@@ -57,21 +59,41 @@ def post_receive
|
57 | 59 |
|
58 | 60 | # Post to each post-receive URL
|
59 | 61 | @repository.repository_post_receive_urls.all(:order => "active DESC, created_at ASC", :conditions => "active=1").each {|prurl|
|
60 |
| - msg = "Posting #{payloads.length} post-receive payloads to #{prurl.url} ... " |
61 |
| - GitHosting.logger.debug msg |
| 62 | + if prurl.mode == :github |
| 63 | + msg = "Sending #{pluralize(payloads.length,'notification')} to #{prurl.url} ... " |
| 64 | + else |
| 65 | + msg = "Notifying #{prurl.url} ... " |
| 66 | + end |
62 | 67 | output.write msg
|
63 | 68 | output.flush
|
| 69 | + |
64 | 70 | uri = URI(prurl.url)
|
| 71 | + http = Net::HTTP.new(uri.host, uri.port) |
| 72 | + http.use_ssl = (uri.scheme == 'https') |
| 73 | + |
| 74 | + errmsg = nil |
65 | 75 | payloads.each {|payload|
|
66 |
| - if prurl.mode == :github |
67 |
| - res = Net::HTTP.post_form(uri, {"payload" => payload.to_json}) |
68 |
| - else |
69 |
| - res = Net::HTTP.get_response(uri) |
| 76 | + begin |
| 77 | + if prurl.mode == :github |
| 78 | + request = Net::HTTP::Post.new(uri.request_uri) |
| 79 | + request.set_form_data({"payload" => payload.to_json}) |
| 80 | + else |
| 81 | + request = Net::HTTP::Get.new(uri.request_uri) |
| 82 | + end |
| 83 | + res = http.start {|openhttp| openhttp.request request} |
| 84 | + errmsg = "Return code: #{res.code} (#{res.message})." if !res.is_a?(Net::HTTPSuccess) |
| 85 | + rescue => e |
| 86 | + errmsg = "Exception: #{e.message}" |
70 | 87 | end
|
71 |
| - output.write res.is_a?(Net::HTTPSuccess) ? "[success] " : "[failure] " |
72 |
| - output.flush |
| 88 | + break if errmsg || prurl.mode != :github |
73 | 89 | }
|
74 |
| - output.write "done\n" |
| 90 | + if errmsg |
| 91 | + output.write "[failure] done\n" |
| 92 | + GitHosting.logger.error "[ #{msg}Failed!\n #{errmsg} ]" |
| 93 | + else |
| 94 | + output.write "[success] done\n" |
| 95 | + GitHosting.logger.info "[ #{msg}Succeeded! ]" |
| 96 | + end |
75 | 97 | output.flush
|
76 | 98 | } if @repository.repository_post_receive_urls.any?
|
77 | 99 |
|
|
0 commit comments