tumbler 0.0.11 → 0.0.12
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/.gitignore +2 -1
- data/CHANGELOG +28 -0
- data/Gemfile +3 -1
- data/README.rdoc +5 -1
- data/Rakefile +9 -10
- data/Tumbler +0 -1
- data/bin/tumbler +2 -3
- data/lib/template/generic.gemspec.erb +1 -6
- data/lib/template/generic.rb.erb +4 -0
- data/lib/tumbler/cli.rb +18 -60
- data/lib/tumbler/generate.rb +32 -33
- data/lib/tumbler/manager.rb +2 -4
- data/lib/tumbler/version.rb +1 -1
- data/test/changelog_test.rb +59 -0
- data/test/cli_test.rb +68 -0
- data/test/gemspec_test.rb +23 -0
- data/test/generate_test.rb +81 -0
- data/test/tasks_test.rb +76 -0
- data/test/teststrap.rb +72 -0
- data/test/updater_test.rb +80 -0
- data/test/version_test.rb +31 -0
- data/tumbler.gemspec +2 -12
- metadata +49 -30
- data/Gemfile.lock +0 -57
- data/spec/bin_tumbler_spec.rb +0 -67
- data/spec/changelog_spec.rb +0 -52
- data/spec/gemspec_spec.rb +0 -38
- data/spec/generate_spec.rb +0 -64
- data/spec/spec.opts +0 -7
- data/spec/spec_helper.rb +0 -84
- data/spec/tasks_spec.rb +0 -71
- data/spec/updater_spec.rb +0 -60
- data/spec/version_spec.rb +0 -53
data/Gemfile.lock
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
---
|
2
|
-
dependencies:
|
3
|
-
fakeweb:
|
4
|
-
group:
|
5
|
-
- :development
|
6
|
-
version: ">= 0"
|
7
|
-
rake:
|
8
|
-
group:
|
9
|
-
- :development
|
10
|
-
version: ">= 0"
|
11
|
-
rspec:
|
12
|
-
group:
|
13
|
-
- :development
|
14
|
-
version: ">= 0"
|
15
|
-
versionomy:
|
16
|
-
group:
|
17
|
-
- :default
|
18
|
-
version: ">= 0"
|
19
|
-
mocha:
|
20
|
-
group:
|
21
|
-
- :development
|
22
|
-
version: ">= 0"
|
23
|
-
json:
|
24
|
-
group:
|
25
|
-
- :default
|
26
|
-
version: ">= 0"
|
27
|
-
callsite:
|
28
|
-
group:
|
29
|
-
- :default
|
30
|
-
version: ">= 0"
|
31
|
-
bundler:
|
32
|
-
group:
|
33
|
-
- :default
|
34
|
-
version: ">= 0"
|
35
|
-
specs:
|
36
|
-
- rake:
|
37
|
-
version: 0.8.7
|
38
|
-
- blockenspiel:
|
39
|
-
version: 0.3.3
|
40
|
-
- bundler:
|
41
|
-
version: 0.9.26
|
42
|
-
- callsite:
|
43
|
-
version: 0.0.2
|
44
|
-
- fakeweb:
|
45
|
-
version: 1.2.8
|
46
|
-
- json:
|
47
|
-
version: 1.4.3
|
48
|
-
- mocha:
|
49
|
-
version: 0.9.8
|
50
|
-
- rspec:
|
51
|
-
version: 1.3.0
|
52
|
-
- versionomy:
|
53
|
-
version: 0.4.0
|
54
|
-
hash: 85f3afef38338d73c791177045f3c5d9b77a14b4
|
55
|
-
sources:
|
56
|
-
- Rubygems:
|
57
|
-
uri: http://gemcutter.org
|
data/spec/bin_tumbler_spec.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
|
3
|
-
describe 'bin/tumbler' do
|
4
|
-
before(:each) do
|
5
|
-
@bin = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'tumbler'))
|
6
|
-
@target = temp_dir('tmp')
|
7
|
-
end
|
8
|
-
|
9
|
-
after(:each) do
|
10
|
-
FileUtils.rm_rf @target
|
11
|
-
$".delete "tumbler/gemspec.rb" # we need to delete this so each gemspec can be generated fresh
|
12
|
-
end
|
13
|
-
|
14
|
-
context 'creation' do
|
15
|
-
it "should generate an app" do
|
16
|
-
Dir.chdir(@target) {`bundle exec ruby #{@bin} test_gem`}
|
17
|
-
$?.should == 0
|
18
|
-
tumbler = Tumbler.load(File.join(@target, 'test_gem'))
|
19
|
-
tumbler.version.to_s.should == '0.0.0'
|
20
|
-
tumbler.bundler.dependencies.first.name.should == 'tumbler'
|
21
|
-
tumbler.bundler.dependencies.first.requirements_list.should == ['>= 0']
|
22
|
-
tumbler.bundler.dependencies.first.groups.should == [:development]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'upgrading' do
|
27
|
-
before(:each) do
|
28
|
-
Dir.chdir(@target) {`bundle exec ruby #{@bin} rails`}
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should do nothing on a normal existing tumbler app" do
|
32
|
-
tumbler = Tumbler.load(File.join(@target, 'rails'))
|
33
|
-
version_file = File.read(tumbler.version.file)
|
34
|
-
changelog_file = File.read(tumbler.changelog.file)
|
35
|
-
gemfile_file = File.read(tumbler.gemfile_path)
|
36
|
-
gemspec_file = File.read(tumbler.gemspec_path)
|
37
|
-
Dir.chdir(@target) {`bundle exec ruby #{@bin} rails -u`}
|
38
|
-
$?.should == 0
|
39
|
-
version_file.should == File.read(tumbler.version.file)
|
40
|
-
changelog_file.should == File.read(tumbler.changelog.file)
|
41
|
-
gemfile_file.should == File.read(tumbler.gemfile_path)
|
42
|
-
gemspec_file.should == File.read(tumbler.gemspec_path)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should work from inside the directory" do
|
46
|
-
tumbler = Tumbler.load(File.join(@target, 'rails'))
|
47
|
-
version_file = File.read(tumbler.version.file)
|
48
|
-
changelog_file = File.read(tumbler.changelog.file)
|
49
|
-
gemfile_file = File.read(tumbler.gemfile_path)
|
50
|
-
gemspec_file = File.read(tumbler.gemspec_path)
|
51
|
-
Dir.chdir("#{@target}/rails") {`bundle exec ruby #{@bin} . -u --name rails`}
|
52
|
-
$?.should == 0
|
53
|
-
version_file.should == File.read(tumbler.version.file)
|
54
|
-
changelog_file.should == File.read(tumbler.changelog.file)
|
55
|
-
gemfile_file.should == File.read(tumbler.gemfile_path)
|
56
|
-
gemspec_file.should == File.read(tumbler.gemspec_path)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should not work if the directory and gemspec mismatch and you don't supply a name" do
|
60
|
-
tumbler = Tumbler.load(File.join(@target, 'rails'))
|
61
|
-
FileUtils.mv("#{@target}/rails/rails.gemspec", "#{@target}/rails/notrails.gemspec")
|
62
|
-
Dir.chdir(@target) {`bundle exec ruby #{@bin} rails -u`}
|
63
|
-
$?.exitstatus.should == 1
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
data/spec/changelog_spec.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
|
3
|
-
describe Tumbler::Manager::Changelog do
|
4
|
-
|
5
|
-
after(:each) do
|
6
|
-
$".delete "tumbler/gemspec.rb" # we need to delete this so each gemspec can be generated fresh
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should generate a changelog" do
|
10
|
-
create_app('test') { |tumbler|
|
11
|
-
tumbler.sh 'touch file1'
|
12
|
-
tumbler.sh 'git add file1'
|
13
|
-
tumbler.sh 'git commit file1 -m"added file1"'
|
14
|
-
tumbler.sh 'touch file2'
|
15
|
-
tumbler.sh 'git add file2'
|
16
|
-
tumbler.sh 'git commit file2 -m"added file2"'
|
17
|
-
Tumbler::Gem.any_instance.stubs(:push).once.returns(true)
|
18
|
-
tumbler.bump_and_push(:tiny)
|
19
|
-
tumbler.version.to_s.should == '0.0.1'
|
20
|
-
tumbler.changelog.file.should match_in_file(/== 0\.0\.1\s+\* added file2 \(.*?, [a-f0-9]{7}\)\s+\* added file1 \(.*?, [a-f0-9]{7}\)/)
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should not perform any changelog activity when the option isn't specified" do
|
25
|
-
create_app('test', :changelog => nil) { |tumbler|
|
26
|
-
tumbler.sh 'touch file1'
|
27
|
-
tumbler.sh 'git add file1'
|
28
|
-
tumbler.sh 'git commit file1 -m"added file1"'
|
29
|
-
tumbler.sh 'touch file2'
|
30
|
-
tumbler.sh 'git add file2'
|
31
|
-
tumbler.sh 'git commit file2 -m"added file2"'
|
32
|
-
Tumbler::Gem.any_instance.stubs(:push).once.returns(true)
|
33
|
-
tumbler.bump_and_push(:tiny)
|
34
|
-
tumbler.version.to_s.should == '0.0.1'
|
35
|
-
File.exist?(File.join(tumbler.base, 'CHANGELOG')).should be_false
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should rollback the entire set of commits when the remote is unreachable" do
|
40
|
-
create_app('test', :changelog => nil, :remote => 'ssh://ijustmadethisupisadomain.com/what_you_say.git') { |tumbler|
|
41
|
-
tumbler.sh 'touch file1'
|
42
|
-
tumbler.sh 'git add file1'
|
43
|
-
tumbler.sh 'git commit file1 -m"added file1"'
|
44
|
-
tumbler.sh 'touch file2'
|
45
|
-
tumbler.sh 'git add file2'
|
46
|
-
tumbler.sh 'git commit file2 -m"added file2"'
|
47
|
-
current_rev = tumbler.current_revision
|
48
|
-
proc {tumbler.bump_and_push(:tiny)}.should raise_error
|
49
|
-
tumbler.sh('git log').split(/\n/)[0].should == "commit #{current_rev}"
|
50
|
-
}
|
51
|
-
end
|
52
|
-
end
|
data/spec/gemspec_spec.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
|
3
|
-
describe Tumbler::GemspecHelper do
|
4
|
-
before(:each) do
|
5
|
-
@dir, @app = create_bare_app('test')
|
6
|
-
@helper = Tumbler::GemspecHelper.new(@app)
|
7
|
-
end
|
8
|
-
|
9
|
-
after(:each) do
|
10
|
-
FileUtils.rm_rf(@dir)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should have a name" do
|
14
|
-
@helper.name.should == 'test'
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should have a version number" do
|
18
|
-
@helper.version.should == '0.0.0'
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should have files" do
|
22
|
-
@helper.files.should == ["CHANGELOG", "Gemfile", "Rakefile", "Tumbler", "lib/test/version.rb", "test.gemspec"]
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should have a date" do
|
26
|
-
@helper.date.should == Time.new.strftime("%Y-%m-%d")
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should inject_dependencies" do
|
30
|
-
spec = Gem::Specification.new
|
31
|
-
File.open("#{@app.base}/Gemfile", 'a') {|f| f.puts "gem 'test', '>= 0.0.5'"}
|
32
|
-
@app.reload
|
33
|
-
@helper.inject_dependencies(spec)
|
34
|
-
spec.runtime_dependencies.should == [Gem::Dependency.new('test', '>= 0.0.5')]
|
35
|
-
spec.development_dependencies.should == [Gem::Dependency.new('tumbler', '>= 0', :development)]
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
data/spec/generate_spec.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
|
3
|
-
describe Tumbler::Generate do
|
4
|
-
|
5
|
-
after(:each) do
|
6
|
-
$".delete "tumbler/gemspec.rb" # we need to delete this so each gemspec can be generated fresh
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should suppress changelog creation if disabled" do
|
10
|
-
temp_dir('test') do |test_dir|
|
11
|
-
Tumbler::Generate.app(test_dir, 'mygem', :changelog => nil).write
|
12
|
-
File.exist?(File.join(test_dir, "CHANGELOG")).should be_false
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should generate the gem constant correctly with -" do
|
17
|
-
temp_dir('test') do |test_dir|
|
18
|
-
Tumbler::Generate.app(test_dir, 'my-gem', :changelog => nil).write
|
19
|
-
File.join(test_dir, 'lib','my-gem','version.rb').should match_in_file(/My::Gem/)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should generate the gem constant correctly with _" do
|
24
|
-
temp_dir('test') do |test_dir|
|
25
|
-
Tumbler::Generate.app(test_dir, 'my_gem', :changelog => nil).write
|
26
|
-
File.join(test_dir, 'lib','my_gem','version.rb').should match_in_file(/MyGem/)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should generate a gemspec" do
|
31
|
-
temp_dir('test') do |test_dir|
|
32
|
-
Tumbler::Generate.app(test_dir, 'mygem').write
|
33
|
-
spec = Gem::Specification.load("#{test_dir}/mygem.gemspec")
|
34
|
-
spec.dependencies.should == [Gem::Dependency.new('tumbler', '>=0', :development)]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should generate a Rakefile" do
|
39
|
-
temp_dir('test') do |test_dir|
|
40
|
-
Tumbler::Generate.app(test_dir, 'mygem').write
|
41
|
-
File.exist?("#{test_dir}/Rakefile").should be_true
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should accept an extra dependency" do
|
46
|
-
temp_dir('test2') do |test_dir|
|
47
|
-
Tumbler::Generate.app(test_dir, 'mygem', :dependencies => 'eventmachine').write
|
48
|
-
spec = Gem::Specification.load("#{test_dir}/mygem.gemspec")
|
49
|
-
spec.dependencies.should include(Gem::Dependency.new('tumbler', '>=0', :development))
|
50
|
-
spec.dependencies.should include(Gem::Dependency.new('eventmachine', '>=0', :runtime))
|
51
|
-
spec.dependencies.size.should == 2
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should accept an extra dependency with a version" do
|
56
|
-
temp_dir('test2') do |test_dir|
|
57
|
-
Tumbler::Generate.app(test_dir, 'mygem', :dependencies => [['eventmachine', '>=1.0.0']]).write
|
58
|
-
spec = Gem::Specification.load("#{test_dir}/mygem.gemspec")
|
59
|
-
spec.dependencies.should include(Gem::Dependency.new('tumbler', '>=0', :development))
|
60
|
-
spec.dependencies.should include(Gem::Dependency.new('eventmachine', '>=1.0.0', :runtime))
|
61
|
-
spec.dependencies.size.should == 2
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'tempfile'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'mocha'
|
4
|
-
|
5
|
-
$LOAD_PATH << File.basename(__FILE__)
|
6
|
-
$LOAD_PATH << File.join(File.basename(__FILE__), '..', 'lib')
|
7
|
-
|
8
|
-
require 'tumbler'
|
9
|
-
|
10
|
-
Tumbler::Gem.any_instance.stubs(:install).raises
|
11
|
-
Tumbler::Gem.any_instance.stubs(:push).raises
|
12
|
-
|
13
|
-
def create_app(name = 'test', opts = {})
|
14
|
-
temp_dir(name) do |dir|
|
15
|
-
temp_dir("remote-#{name}.git") do |remote_dir|
|
16
|
-
Tumbler::Generate.app(dir, name, opts).write
|
17
|
-
tumbler = Tumbler::Manager.new(dir)
|
18
|
-
|
19
|
-
Dir.chdir(remote_dir) { `git --bare init` }
|
20
|
-
|
21
|
-
remote = opts[:remote] || "file://#{remote_dir}"
|
22
|
-
|
23
|
-
Dir.chdir(dir) {
|
24
|
-
`git remote add origin #{remote}`
|
25
|
-
`git push origin master`
|
26
|
-
}
|
27
|
-
|
28
|
-
yield tumbler
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def create_bare_app(name, opts = {})
|
34
|
-
dir = temp_dir(name)
|
35
|
-
Tumbler::Generate.app(dir, name, opts).write
|
36
|
-
tumbler = Tumbler::Manager.new(dir)
|
37
|
-
[dir, tumbler]
|
38
|
-
end
|
39
|
-
|
40
|
-
def temp_dir(name)
|
41
|
-
dir = File.join(Dir.tmpdir, rand(10000).to_s, "#{Process.pid}-#{name}")
|
42
|
-
FileUtils.rm_rf(dir)
|
43
|
-
FileUtils.mkdir_p(dir)
|
44
|
-
if block_given?
|
45
|
-
begin
|
46
|
-
yield dir
|
47
|
-
ensure
|
48
|
-
FileUtils.rm_rf(dir)
|
49
|
-
end
|
50
|
-
else
|
51
|
-
dir
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
module Matchers
|
56
|
-
class MatchInFile
|
57
|
-
def initialize(pattern)
|
58
|
-
@pattern = pattern
|
59
|
-
end
|
60
|
-
|
61
|
-
def matches?(file)
|
62
|
-
@file = file
|
63
|
-
@file = File.exist?(file) ? File.read(file) : false
|
64
|
-
@file and @file =~ @pattern
|
65
|
-
end
|
66
|
-
|
67
|
-
def failure_message
|
68
|
-
"expected #{@pattern} to match in '#{@file}'"
|
69
|
-
end
|
70
|
-
|
71
|
-
def negative_failure_message
|
72
|
-
"expected #{@pattern} to not match in '#{@file}'"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def match_in_file(expected)
|
77
|
-
MatchInFile.new(expected)
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
Spec::Runner.configure do |config|
|
83
|
-
config.include(Matchers)
|
84
|
-
end
|
data/spec/tasks_spec.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
|
3
|
-
describe Tumbler do
|
4
|
-
before(:all) do
|
5
|
-
ENV['RUBYLIB'] = File.expand_path(File.join(__DIR__, '..', 'lib'))
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should gem.build" do
|
9
|
-
create_app do |app|
|
10
|
-
app.gem.build
|
11
|
-
File.exist?("#{app.base}/pkg/test-0.0.0.gem").should be_true
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "version bumping" do
|
16
|
-
it "shouldn't write a new tag" do
|
17
|
-
create_app do |app|
|
18
|
-
app.bump_and_commit(:minor)
|
19
|
-
app.tags.should == ['0.0.0']
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should increment the locally stored version" do
|
24
|
-
create_app do |app|
|
25
|
-
app.bump_and_commit(:minor)
|
26
|
-
app.reload
|
27
|
-
app.version.to_s.should == '0.1.0'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should successfully push after a bump" do
|
32
|
-
create_app do |app|
|
33
|
-
Tumbler::Gem.any_instance.stubs(:push).once.returns(true)
|
34
|
-
app.bump_and_commit(:minor)
|
35
|
-
app.tag_and_push
|
36
|
-
app.reload
|
37
|
-
app.version.to_s.should == '0.1.0'
|
38
|
-
app.tags.should == %w(0.0.0 0.1.0)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "version bumping & pushing" do
|
44
|
-
it "should create a nice changelog" do
|
45
|
-
create_app do |app|
|
46
|
-
Tumbler::Gem.any_instance.stubs(:push).times(4).returns(true)
|
47
|
-
app.sh 'touch test1; git add test1; git commit test1 -m"Added test1"'
|
48
|
-
app.bump_and_push(:minor)
|
49
|
-
app.sh 'touch test2; git add test2; git commit test2 -m"Added test2"'
|
50
|
-
app.sh 'touch test2-1; git add test2-1; git commit test2-1 -m"Added test2-1"'
|
51
|
-
app.bump_and_push(:minor)
|
52
|
-
app.sh 'touch test3; git add test3; git commit test3 -m"Added test3"'
|
53
|
-
app.bump_and_push(:minor)
|
54
|
-
app.sh 'touch test4; git add test4; git commit test4 -m"Added test4"'
|
55
|
-
app.bump_and_push(:minor)
|
56
|
-
app.reload
|
57
|
-
changelog = File.read(app.changelog.file)
|
58
|
-
changelog.should match(/== 0\.4\.0\s+\* Added test4 \(.*?\)\n\n==/)
|
59
|
-
changelog.should match(/== 0\.3\.0\s+\* Added test3 \(.*?\)\n\n==/)
|
60
|
-
changelog.should match(/== 0\.2\.0\s+\* Added test2-1 \(.*?\)\n\* Added test2 \(.*?\)\n\n==/)
|
61
|
-
changelog.should match(/== 0\.1\.0\s+\* Added test1 \(.*?\)\n\n$/)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# @app.bump_and_commit(:minor)
|
68
|
-
# @app.tag_and_push
|
69
|
-
#end
|
70
|
-
|
71
|
-
end
|