spitball 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
data/bin/spitball-server CHANGED
@@ -36,20 +36,32 @@ get '/:digest.:format' do |digest, format|
36
36
  send_file Spitball::Repo.path(digest, format), :type => format
37
37
  end
38
38
 
39
- # POST a gemfile. Returns 201 Created if the bundle already exists, or 202 Accepted if it does not. The body of the response is the URI for the tarball.
39
+ class Streamer
40
+ def initialize(io); @io = io end
41
+ def each; while buf = @io.read(200); yield buf end end
42
+ end
43
+
44
+ # POST a gemfile. Returns 201 Created if the bundle already exists, or
45
+ # 202 Accepted if it does not. The body of the response is the URI for
46
+ # the tarball.
40
47
  post '/create' do
41
- p request.body.read
42
- request.body.rewind
43
48
  ball = Spitball.new(request.body.read)
44
49
  url = "#{request.url.split("/create").first}/#{ball.digest}.tgz"
45
50
  response['Location'] = url
46
51
 
47
52
  if ball.cached?
48
53
  status 201
54
+ "Bundle tarball pre-cached.\n"
49
55
  else
50
56
  status 202
51
- fork { ball.cache! }
52
- end
53
57
 
54
- url
58
+ pid = open("|-")
59
+
60
+ if pid == nil # child
61
+ ball.cache!
62
+ exit!
63
+ end
64
+
65
+ Streamer.new(pid)
66
+ end
55
67
  end
@@ -12,33 +12,48 @@ class Spitball::Remote
12
12
  end
13
13
 
14
14
  def copy_to(path)
15
- data = get_tarball_data
15
+ data = generate_remote_tarball
16
16
  File.open(path, 'w') { |f| f.write data }
17
17
  end
18
18
 
19
- def get_tarball_data
19
+ private
20
+
21
+ def generate_remote_tarball
20
22
  url = URI.parse("http://#{@host}:#{@port}/create")
21
23
  res = Net::HTTP.start(url.host, url.port) do |http|
22
- http.post(url.path, @gemfile)
24
+ http.post(url.path, @gemfile) do |body|
25
+ print body
26
+ end
23
27
  end
24
28
 
25
- case res.code
26
- when '201' # Created
27
- Net::HTTP.get(URI.parse(res['Location']))
28
- when '202' # Accepted
29
- (WAIT_SECONDS / 2).times do
30
- sleep 2
31
- try = Net::HTTP.get_response(URI.parse(res['Location']))
32
- next if try.code != '200'
33
- return try.body
29
+ print "\nDownloading tarball..."; $stdout.flush
30
+
31
+ data =
32
+ case res.code
33
+ when '201', '202' # Created, Accepted
34
+ get_tarball_data res['Location']
35
+ else
36
+ raise Spitball::ServerFailure, "Expected 2xx response code. Got #{res.code}."
34
37
  end
35
38
 
36
- raise Spitball::ServerFailure, "Spitball build timed out. The build failed or it's just taking a while..."
37
- else
38
- raise Spitball::ServerFailure, "Expected 2xx response code. Got #{res.code}."
39
- end
39
+ puts "done."
40
+
41
+ data
40
42
  rescue URI::InvalidURIError => e
41
43
  raise Spitball::ClientError, e.message
42
44
  end
43
45
 
46
+ def get_tarball_data(location)
47
+ uri = URI.parse(location)
48
+
49
+ (WAIT_SECONDS / 2).times do
50
+ if (res = Net::HTTP.get_response(uri)).code == '200'
51
+ return res.body
52
+ else
53
+ sleep 2
54
+ end
55
+ end
56
+
57
+ raise Spitball::ServerFailure, "Spitball download timed out."
58
+ end
44
59
  end
data/lib/spitball.rb CHANGED
@@ -7,7 +7,7 @@ class Spitball
7
7
  require 'spitball/remote'
8
8
 
9
9
  class ServerFailure < StandardError; end
10
- class ClientFailure < StandardError; end
10
+ class ClientError < StandardError; end
11
11
  class BundleCreationFailure < StandardError; end
12
12
 
13
13
  VERSION = '1.0'
data/spitball.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{spitball}
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Freels", "Brandon Mitchell"]
12
- s.date = %q{2010-08-23}
12
+ s.date = %q{2010-09-02}
13
13
  s.description = %q{Use bundler to generate gem tarball packages.}
14
14
  s.email = %q{freels@twitter.com}
15
15
  s.executables = ["spitball", "spitball-cache-cleanup", "spitball-server"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spitball
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 2
10
- version: 0.2.2
9
+ - 3
10
+ version: 0.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Freels
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-08-23 00:00:00 -07:00
19
+ date: 2010-09-02 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency