spitball 0.2.1 → 0.2.2

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
@@ -21,7 +21,7 @@ begin
21
21
  gem.summary = "get a bundle"
22
22
  gem.description = "Use bundler to generate gem tarball packages."
23
23
  gem.email = "freels@twitter.com"
24
- gem.homepage = "http://twitter.com"
24
+ gem.homepage = "http://github.com/freels/spitball"
25
25
  gem.authors = ["Matt Freels", "Brandon Mitchell"]
26
26
 
27
27
  gem.add_dependency 'bundler', '>= 0.9.5'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spitball'
4
+ require 'optparse'
5
+
6
+ args = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "Usage: spitball-cache-cleanup [options]"
10
+ opts.separator ""
11
+ opts.separator "options:"
12
+
13
+ opts.on('-w', '--access-window SECONDS', 'Access window within which tarballs are kept. Default 30 days') do |access_window|
14
+ args[:access_window] = access_window
15
+ end
16
+ end
17
+
18
+ opts.permute!(ARGV)
19
+
20
+ args[:access_window] ||= 2592000
21
+
22
+ Spitball::Repo.clean_up_unused(args[:access_window].to_i)
data/bin/spitball-server CHANGED
@@ -25,7 +25,7 @@ mime_type :tgz, 'application/x-compressed'
25
25
  # return json array of cached SHAs
26
26
  get '/list' do
27
27
  content_type :json
28
- JSON.dump Spitball::Repo.list_cached
28
+ JSON.dump Spitball::Repo.cached_digests
29
29
  end
30
30
 
31
31
  # return tgz or gemfile of cached SHA or 404
@@ -3,7 +3,7 @@ require 'uri'
3
3
 
4
4
  class Spitball::Remote
5
5
 
6
- WAIT_SECONDS = 30
6
+ WAIT_SECONDS = 240
7
7
 
8
8
  def initialize(gemfile, host, port)
9
9
  @gemfile = gemfile
data/lib/spitball/repo.rb CHANGED
@@ -9,14 +9,18 @@ module Spitball::Repo
9
9
  end
10
10
 
11
11
  def exist?(digest)
12
- File.exist? path(digest, 'tgz')
12
+ File.exist? tarball(digest)
13
+ end
14
+
15
+ def tarball(digest)
16
+ path(digest, 'tgz')
13
17
  end
14
18
 
15
19
  def gemfile(digest)
16
- File.read path(digest, 'gemfile')
20
+ path(digest, 'gemfile')
17
21
  end
18
22
 
19
- def list_cached
23
+ def cached_digests
20
24
  Dir[File.join(WORKING_DIR, 'bundle_*.tgz')].map do |path|
21
25
  path.match(/bundle_(.*?)\.tgz$/)[1]
22
26
  end.compact.uniq.sort
@@ -25,4 +29,18 @@ module Spitball::Repo
25
29
  def make_cache_dir
26
30
  FileUtils.mkdir_p WORKING_DIR
27
31
  end
32
+
33
+ def clean_up_unused(access_window)
34
+ cutoff_time = Time.now - access_window
35
+
36
+ cached_digests.each do |digest|
37
+ stat = File.stat(tarball(digest))
38
+ access_time = [stat.atime, stat.mtime].max
39
+
40
+ if access_time < cutoff_time
41
+ File.unlink(tarball(digest)) if File.exist? tarball(digest)
42
+ File.unlink(gemfile(digest)) if File.exist? gemfile(digest)
43
+ end
44
+ end
45
+ end
28
46
  end
@@ -148,27 +148,49 @@ describe Spitball::Repo do
148
148
  end
149
149
 
150
150
  describe "exist?" do
151
- it "returns true if tarball for a digest has been exists" do
151
+ it "returns true if tarball for a digest exists" do
152
152
  Spitball::Repo.exist?('digest').should_not == true
153
153
  File.open(Spitball::Repo.path('digest', 'tgz'), 'w') {|f| f.write 'tarball!' }
154
154
  Spitball::Repo.exist?('digest').should == true
155
155
  end
156
156
  end
157
157
 
158
+ describe "tarball" do
159
+ it "returns the path of the cached tarball for a digest" do
160
+ Spitball::Repo.tarball('digest').should == Spitball::Repo.path('digest', 'tgz')
161
+ end
162
+ end
163
+
158
164
  describe "gemfile" do
159
- it "returns the contents of the cached gemfile for a digest" do
160
- gemfile = 'gem :memcached'
161
- File.open(Spitball::Repo.path('digest', 'gemfile'), 'w') {|f| f.write gemfile }
162
- Spitball::Repo.gemfile('digest').should == gemfile
165
+ it "returns the path of the cached gemfile for a digest" do
166
+ Spitball::Repo.gemfile('digest').should == Spitball::Repo.path('digest', 'gemfile')
163
167
  end
164
168
  end
165
169
 
166
- describe "list_cached" do
170
+ describe "cached_digests" do
167
171
  it "returns a list of cached bundles" do
168
- File.open(Spitball::Repo.path('digest', 'tgz'), 'w') {|f| f.write 'tarball!' }
169
- File.open(Spitball::Repo.path('digest2', 'tgz'), 'w') {|f| f.write 'tarball2!' }
172
+ File.open(Spitball::Repo.tarball('digest'), 'w') {|f| f.write 'tarball!' }
173
+ File.open(Spitball::Repo.tarball('digest2'), 'w') {|f| f.write 'tarball2!' }
174
+
175
+ Spitball::Repo.cached_digests.should == ['digest', 'digest2']
176
+ end
177
+ end
178
+
179
+ describe "clean_up_unused" do
180
+ it "removes cached tarballs and gemfiles that haven't been accessed within a certain period" do
181
+ File.open(Spitball::Repo.tarball('digest'), 'w') {|f| f.write 'tarball!' }
182
+ File.open(Spitball::Repo.gemfile('digest'), 'w') {|f| f.write 'gemfile!' }
183
+
184
+ sleep 2
185
+ File.open(Spitball::Repo.tarball('digest2'), 'w') {|f| f.write 'tarball2!' }
186
+ File.open(Spitball::Repo.gemfile('digest2'), 'w') {|f| f.write 'gemfile2!' }
187
+
188
+ Spitball::Repo.clean_up_unused(1)
170
189
 
171
- Spitball::Repo.list_cached.should == ['digest', 'digest2']
190
+ File.exist?(Spitball::Repo.tarball('digest')).should_not == true
191
+ File.exist?(Spitball::Repo.gemfile('digest')).should_not == true
192
+ File.exist?(Spitball::Repo.tarball('digest2')).should == true
193
+ File.exist?(Spitball::Repo.gemfile('digest2')).should == true
172
194
  end
173
195
  end
174
196
  end
data/spitball.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{spitball}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
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-05}
12
+ s.date = %q{2010-08-23}
13
13
  s.description = %q{Use bundler to generate gem tarball packages.}
14
14
  s.email = %q{freels@twitter.com}
15
- s.executables = ["spitball", "spitball-server"]
15
+ s.executables = ["spitball", "spitball-cache-cleanup", "spitball-server"]
16
16
  s.extra_rdoc_files = [
17
17
  "README.md"
18
18
  ]
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  "Rakefile",
24
24
  "VERSION",
25
25
  "bin/spitball",
26
+ "bin/spitball-cache-cleanup",
26
27
  "bin/spitball-server",
27
28
  "lib/spitball.rb",
28
29
  "lib/spitball/digest.rb",
@@ -34,7 +35,7 @@ Gem::Specification.new do |s|
34
35
  "spec/spitball_spec.rb",
35
36
  "spitball.gemspec"
36
37
  ]
37
- s.homepage = %q{http://twitter.com}
38
+ s.homepage = %q{http://github.com/freels/spitball}
38
39
  s.rdoc_options = ["--charset=UTF-8"]
39
40
  s.require_paths = ["lib"]
40
41
  s.rubygems_version = %q{1.3.7}
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: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
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-05 00:00:00 -07:00
19
+ date: 2010-08-23 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -82,6 +82,7 @@ description: Use bundler to generate gem tarball packages.
82
82
  email: freels@twitter.com
83
83
  executables:
84
84
  - spitball
85
+ - spitball-cache-cleanup
85
86
  - spitball-server
86
87
  extensions: []
87
88
 
@@ -94,6 +95,7 @@ files:
94
95
  - Rakefile
95
96
  - VERSION
96
97
  - bin/spitball
98
+ - bin/spitball-cache-cleanup
97
99
  - bin/spitball-server
98
100
  - lib/spitball.rb
99
101
  - lib/spitball/digest.rb
@@ -105,7 +107,7 @@ files:
105
107
  - spec/spitball_spec.rb
106
108
  - spitball.gemspec
107
109
  has_rdoc: true
108
- homepage: http://twitter.com
110
+ homepage: http://github.com/freels/spitball
109
111
  licenses: []
110
112
 
111
113
  post_install_message: