spitball 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  ROOT_DIR = File.expand_path(File.dirname(__FILE__))
2
+ VERSION_FILE = File.expand_path("lib/spitball/version.rb", ROOT_DIR)
2
3
 
3
4
  require 'rubygems' rescue nil
4
5
  require 'rake'
@@ -12,22 +13,37 @@ Spec::Rake::SpecTask.new(:spec) do |t|
12
13
  t.spec_files = FileList['spec/**/*_spec.rb']
13
14
  end
14
15
 
15
- # gemification with jeweler
16
- # FIXME: stop using jeweler when I get smarter.
17
- begin
18
- require 'jeweler'
19
- Jeweler::Tasks.new do |gem|
20
- gem.name = "spitball"
21
- gem.summary = "get a bundle"
22
- gem.description = "Use bundler to generate gem tarball packages."
23
- gem.email = "freels@twitter.com"
24
- gem.homepage = "http://github.com/freels/spitball"
25
- gem.authors = ["Matt Freels", "Brandon Mitchell", "Joshua Hull"]
26
-
27
- gem.add_dependency 'sinatra', '>= 1.0'
28
- gem.add_development_dependency 'rspec'
29
- gem.add_development_dependency 'rr'
16
+ require 'bundler'
17
+ Bundler::GemHelper.install_tasks
18
+
19
+ namespace :version do
20
+ def update_version
21
+ source = File.read(VERSION_FILE)
22
+ new_v = nil
23
+ File.open(VERSION_FILE, 'w') do |f|
24
+ f.write source.gsub(/\d+\.\d+\.\d+/) {|v|
25
+ new_v = yield(*v.split(".").map {|i| i.to_i}).join(".")
26
+ }
27
+ end
28
+ new_v
29
+ end
30
+
31
+ def commit_version(v)
32
+ system "git add #{VERSION_FILE} && git c -m 'release version #{v}' && git tag #{v}"
33
+ end
34
+
35
+ task :incr_major do
36
+ new_v = update_version {|m,_,_| [m+1, 0, 0] }
37
+ commit_version(new_v)
38
+ end
39
+
40
+ task :incr_minor do
41
+ new_v = update_version {|ma,mi,_| [ma, mi+1, 0] }
42
+ commit_version(new_v)
43
+ end
44
+
45
+ task :incr_patch do
46
+ new_v = update_version {|ma,mi,p| [ma, mi, p+1] }
47
+ commit_version(new_v)
30
48
  end
31
- rescue LoadError
32
- puts "Jeweler not available. Install it with: gem install jeweler"
33
49
  end
data/bin/spitball CHANGED
@@ -20,13 +20,13 @@ opts = OptionParser.new do |opts|
20
20
  args[:port] = port
21
21
  end
22
22
 
23
- opts.on('--without a,b,c', Array, 'Excluded groups in the tarball. Does not apply to remote spitballs') do |without|
24
- args[:without] = without
23
+ opts.on('-v', '--version', 'Display the version and quit') do
24
+ puts Spitball::VERSION
25
+ exit!(0)
25
26
  end
26
27
 
27
- opts.on('--version') do
28
- puts Spitball::VERSION
29
- exit 0
28
+ opts.on('--without a,b,c', Array, 'Excluded groups in the tarball. Does not apply to remote spitballs') do |without|
29
+ args[:without] = without
30
30
  end
31
31
 
32
32
  opts.separator ""
@@ -49,7 +49,7 @@ gemfile = File.read(args[:gemfile])
49
49
  gemfile_lock = File.read("#{args[:gemfile]}.lock")
50
50
 
51
51
  ball = args[:host] ?
52
- Spitball::Remote.new(gemfile, gemfile_lock, :host => args[:host], :port => (args[:port] || 8080).to_i) :
52
+ Spitball::Remote.new(gemfile, gemfile_lock, :host => args[:host], :port => (args[:port] || 8080).to_i, :without => args[:without]) :
53
53
  Spitball.new(gemfile, gemfile_lock, :without => args[:without])
54
54
 
55
55
  ball.copy_to args[:destination]
data/bin/spitball-server CHANGED
@@ -46,40 +46,48 @@ end
46
46
  # 202 Accepted if it does not. The body of the response is the URI for
47
47
  # the tarball.
48
48
  post '/create' do
49
- ball = Spitball.new(params['gemfile'], params['gemfile_lock'])
50
- url = "#{request.url.split("/create").first}/#{ball.digest}.tgz"
51
- response['Location'] = url
52
-
53
- if ball.cached?
54
- status 201
55
- "Bundle tarball pre-cached.\n"
49
+ request_version = request.env["HTTP_#{Spitball::PROTOCOL_HEADER.gsub(/-/, '_').upcase}"]
50
+ if request_version != Spitball::PROTOCOL_VERSION
51
+ status 403
52
+ "Received version #{request_version} but need version #{Spitball::PROTOCOL_VERSION}"
56
53
  else
57
- status 202
54
+ without = request_version = request.env["HTTP_#{Spitball::WITHOUT_HEADER.gsub(/-/, '_').upcase}"]
55
+ without &&= without.split(',')
56
+ ball = Spitball.new(params['gemfile'], params['gemfile_lock'], :without => without)
57
+ url = "#{request.url.split("/create").first}/#{ball.digest}.tgz"
58
+ response['Location'] = url
58
59
 
59
- i,o = IO.pipe
60
+ if ball.cached?
61
+ status 201
62
+ "Bundle tarball pre-cached.\n"
63
+ else
64
+ status 202
60
65
 
61
- # fork twice. once so we can have a pid to detach from in order to clean up,
62
- # twice in order to properly redirect stdout for underlying shell commands.
63
- pid = fork do
64
- baller = open("|-")
65
- if baller == nil # child
66
- begin
67
- ball.cache!
68
- rescue Object => e
69
- puts "#{e.class}: #{e}", e.backtrace.map{|l| "\t#{l}" }
70
- end
71
- else
72
- while buf = baller.read(200)
73
- $stdout.print buf
74
- o.print buf
66
+ i,o = IO.pipe
67
+
68
+ # fork twice. once so we can have a pid to detach from in order to clean up,
69
+ # twice in order to properly redirect stdout for underlying shell commands.
70
+ pid = fork do
71
+ baller = open("|-")
72
+ if baller == nil # child
73
+ begin
74
+ ball.cache!
75
+ rescue Object => e
76
+ puts "#{e.class}: #{e}", e.backtrace.map{|l| "\t#{l}" }
77
+ end
78
+ else
79
+ while buf = baller.read(200)
80
+ $stdout.print buf
81
+ o.print buf
82
+ end
75
83
  end
84
+ exit!
76
85
  end
77
- exit!
78
- end
79
86
 
80
- o.close
81
- Process.detach(pid)
87
+ o.close
88
+ Process.detach(pid)
82
89
 
83
- Streamer.new(i)
90
+ Streamer.new(i)
91
+ end
84
92
  end
85
93
  end
data/lib/spitball.rb CHANGED
@@ -9,12 +9,15 @@ class Spitball
9
9
  require 'spitball/repo'
10
10
  require 'spitball/file_lock'
11
11
  require 'spitball/remote'
12
+ require 'spitball/version'
12
13
 
13
14
  class ServerFailure < StandardError; end
14
15
  class ClientError < StandardError; end
15
16
  class BundleCreationFailure < StandardError; end
16
17
 
17
- VERSION = '1.0'
18
+ PROTOCOL_VERSION = '1'
19
+ PROTOCOL_HEADER = "X-Spitball-Protocol"
20
+ WITHOUT_HEADER = "X-Spitball-Without"
18
21
 
19
22
  include Spitball::Digest
20
23
  include Spitball::ClientCommon
@@ -10,6 +10,7 @@ class Spitball::Remote
10
10
  @gemfile_lock = gemfile_lock
11
11
  @host = opts[:host]
12
12
  @port = opts[:port]
13
+ @without = (opts[:without] || []).map{|w| w.to_sym}
13
14
  end
14
15
 
15
16
  def cached?
@@ -22,14 +23,17 @@ class Spitball::Remote
22
23
  url = URI.parse("http://#{@host}:#{@port}/create")
23
24
  req = Net::HTTP::Post.new(url.path)
24
25
  req.form_data = {'gemfile' => @gemfile, 'gemfile_lock' => @gemfile_lock}
25
-
26
+ req.add_field Spitball::PROTOCOL_HEADER, Spitball::PROTOCOL_VERSION
27
+ req.add_field Spitball::WITHOUT_HEADER, @without.join(',')
26
28
  res = Net::HTTP.new(url.host, url.port).start do |http|
29
+ http.read_timeout = 3000
27
30
  http.request(req) {|r| puts r.read_body }
28
31
  end
29
32
 
30
33
  case res.code
31
34
  when '201', '202' # Created, Accepted
32
35
  @tarball_url = res['Location']
36
+ when '403'
33
37
  else
34
38
  raise Spitball::ServerFailure, "Expected 2xx response code. Got #{res.code}."
35
39
  end
@@ -49,6 +53,7 @@ class Spitball::Remote
49
53
  end
50
54
 
51
55
  def get_tarball_data(location)
56
+ puts "location --> #{location.inspect}"
52
57
  uri = URI.parse(location)
53
58
 
54
59
  if (res = Net::HTTP.get_response(uri)).code == '200'
@@ -56,7 +61,7 @@ class Spitball::Remote
56
61
  else
57
62
  raise Spitball::ServerFailure, "Spitball download failed."
58
63
  end
59
- rescue URI::InvalidURIError => e
60
- raise Spitball::ClientError, e.message
64
+ #rescue URI::InvalidURIError => e
65
+ # raise Spitball::ClientError, e.message
61
66
  end
62
67
  end
@@ -0,0 +1,3 @@
1
+ class Spitball
2
+ VERSION = '0.4.0'
3
+ end
data/spitball.gemspec CHANGED
@@ -1,69 +1,27 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "spitball/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{spitball}
8
- s.version = "0.3.2"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Matt Freels", "Brandon Mitchell", "Joshua Hull"]
12
- s.date = %q{2010-10-28}
6
+ s.name = "spitball"
7
+ s.version = Spitball::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Matt Freels", "Brandon Mitchell", "Joshua Hull"]
10
+ s.email = "freels@twitter.com"
11
+ s.homepage = "http://rubygems.org/gems/spitball"
12
+ s.summary = %q{Use bundler to generate gem tarball packages.}
13
13
  s.description = %q{Use bundler to generate gem tarball packages.}
14
- s.email = %q{freels@twitter.com}
15
- s.executables = ["spitball", "spitball-cache-cleanup", "spitball-server"]
16
- s.extra_rdoc_files = [
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- "README.md",
22
- "Rakefile",
23
- "VERSION",
24
- "bin/spitball",
25
- "bin/spitball-cache-cleanup",
26
- "bin/spitball-server",
27
- "lib/ext/bundler_fake_dsl.rb",
28
- "lib/ext/bundler_lockfile_parser.rb",
29
- "lib/spitball.rb",
30
- "lib/spitball/client_common.rb",
31
- "lib/spitball/digest.rb",
32
- "lib/spitball/file_lock.rb",
33
- "lib/spitball/remote.rb",
34
- "lib/spitball/repo.rb",
35
- "spec/spec.opts",
36
- "spec/spec_helper.rb",
37
- "spec/spitball_spec.rb",
38
- "spitball.gemspec"
39
- ]
40
- s.homepage = %q{http://github.com/freels/spitball}
41
- s.rdoc_options = ["--charset=UTF-8"]
42
- s.require_paths = ["lib"]
43
- s.rubygems_version = %q{1.3.7}
44
- s.summary = %q{get a bundle}
45
- s.test_files = [
46
- "spec/spec_helper.rb",
47
- "spec/spitball_spec.rb"
48
- ]
49
14
 
50
- if s.respond_to? :specification_version then
51
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
52
- s.specification_version = 3
15
+ s.rubyforge_project = "spitball"
53
16
 
54
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
- s.add_runtime_dependency(%q<sinatra>, [">= 1.0"])
56
- s.add_development_dependency(%q<rspec>, [">= 0"])
57
- s.add_development_dependency(%q<rr>, [">= 0"])
58
- else
59
- s.add_dependency(%q<sinatra>, [">= 1.0"])
60
- s.add_dependency(%q<rspec>, [">= 0"])
61
- s.add_dependency(%q<rr>, [">= 0"])
62
- end
63
- else
64
- s.add_dependency(%q<sinatra>, [">= 1.0"])
65
- s.add_dependency(%q<rspec>, [">= 0"])
66
- s.add_dependency(%q<rr>, [">= 0"])
67
- end
68
- end
17
+ s.add_dependency 'sinatra', '>= 1.0'
18
+ s.add_development_dependency 'rspec', "~> 1.3.0"
19
+ s.add_development_dependency 'rr'
20
+ s.add_development_dependency 'rake'
69
21
 
22
+ s.files = `git ls-files`.split("\n")
23
+ s.test_files = `git ls-files -- spec/*`.split("\n")
24
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
+ s.extra_rdoc_files = [ "README.md" ]
26
+ s.require_paths = ["lib"]
27
+ end
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: 23
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Freels
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-10-28 00:00:00 -07:00
20
+ date: 2010-11-13 00:00:00 -08:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -41,12 +41,14 @@ dependencies:
41
41
  requirement: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
- - - ">="
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
- hash: 3
46
+ hash: 27
47
47
  segments:
48
+ - 1
49
+ - 3
48
50
  - 0
49
- version: "0"
51
+ version: 1.3.0
50
52
  type: :development
51
53
  version_requirements: *id002
52
54
  - !ruby/object:Gem::Dependency
@@ -63,6 +65,20 @@ dependencies:
63
65
  version: "0"
64
66
  type: :development
65
67
  version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id004
66
82
  description: Use bundler to generate gem tarball packages.
67
83
  email: freels@twitter.com
68
84
  executables:
@@ -77,7 +93,6 @@ files:
77
93
  - .gitignore
78
94
  - README.md
79
95
  - Rakefile
80
- - VERSION
81
96
  - bin/spitball
82
97
  - bin/spitball-cache-cleanup
83
98
  - bin/spitball-server
@@ -89,17 +104,18 @@ files:
89
104
  - lib/spitball/file_lock.rb
90
105
  - lib/spitball/remote.rb
91
106
  - lib/spitball/repo.rb
107
+ - lib/spitball/version.rb
92
108
  - spec/spec.opts
93
109
  - spec/spec_helper.rb
94
110
  - spec/spitball_spec.rb
95
111
  - spitball.gemspec
96
112
  has_rdoc: true
97
- homepage: http://github.com/freels/spitball
113
+ homepage: http://rubygems.org/gems/spitball
98
114
  licenses: []
99
115
 
100
116
  post_install_message:
101
- rdoc_options:
102
- - --charset=UTF-8
117
+ rdoc_options: []
118
+
103
119
  require_paths:
104
120
  - lib
105
121
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -122,11 +138,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
138
  version: "0"
123
139
  requirements: []
124
140
 
125
- rubyforge_project:
141
+ rubyforge_project: spitball
126
142
  rubygems_version: 1.3.7
127
143
  signing_key:
128
144
  specification_version: 3
129
- summary: get a bundle
145
+ summary: Use bundler to generate gem tarball packages.
130
146
  test_files:
147
+ - spec/spec.opts
131
148
  - spec/spec_helper.rb
132
149
  - spec/spitball_spec.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.3.2