Skip to content
This repository was archived by the owner on Feb 28, 2019. It is now read-only.

Commit 44be5da

Browse files
committed
Apply patch to work around Buildr password encoding issue
1 parent 66af2a1 commit 44be5da

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

tasks/buildr_artifact_patch.rake

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
raise 'Patch already integrated into buildr code' unless Buildr::VERSION.to_s == '1.5.6'
2+
3+
class URI::HTTP
4+
private
5+
6+
def write_internal(options, &block)
7+
options ||= {}
8+
connect do |http|
9+
trace "Uploading to #{path}"
10+
http.read_timeout = 500
11+
content = StringIO.new
12+
while chunk = yield(RW_CHUNK_SIZE)
13+
content << chunk
14+
end
15+
headers = { 'Content-MD5' => Digest::MD5.hexdigest(content.string), 'Content-Type' => 'application/octet-stream', 'User-Agent' => "Buildr-#{Buildr::VERSION}" }
16+
request = Net::HTTP::Put.new(request_uri.empty? ? '/' : request_uri, headers)
17+
request.basic_auth URI.decode(self.user), URI.decode(self.password) if self.user
18+
response = nil
19+
with_progress_bar options[:progress], path.split('/').last, content.size do |progress|
20+
request.content_length = content.size
21+
content.rewind
22+
stream = Object.new
23+
class << stream;
24+
self;
25+
end.send :define_method, :read do |*args|
26+
bytes = content.read(*args)
27+
progress << bytes if bytes
28+
bytes
29+
end
30+
request.body_stream = stream
31+
response = http.request(request)
32+
end
33+
34+
case response
35+
when Net::HTTPRedirection
36+
# Try to download from the new URI, handle relative redirects.
37+
trace "Redirected to #{response['Location']}"
38+
content.rewind
39+
return (self + URI.parse(response['location'])).write_internal(options) {|bytes| content.read(bytes)}
40+
when Net::HTTPSuccess
41+
else
42+
raise RuntimeError, "Failed to upload #{self}: #{response.message}"
43+
end
44+
end
45+
end
46+
end

0 commit comments

Comments
 (0)