bard 0.6.9 → 0.6.10
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -2
- data/VERSION +1 -1
- data/bard.gemspec +11 -13
- data/features/bard_check.feature +7 -7
- data/features/bard_deploy.feature +3 -3
- data/features/bard_pull.feature +19 -17
- data/features/bard_push.feature +27 -25
- data/features/step_definitions/check_steps.rb +1 -1
- data/features/step_definitions/git_steps.rb +11 -34
- data/features/step_definitions/global_steps.rb +8 -25
- data/features/step_definitions/rails_steps.rb +15 -83
- data/features/step_definitions/submodule_steps.rb +20 -100
- data/features/support/env.rb +29 -0
- data/lib/bard/check.rb +1 -1
- metadata +5 -15
data/Rakefile
CHANGED
@@ -13,9 +13,8 @@ begin
|
|
13
13
|
gem.add_development_dependency "ruby-debug"
|
14
14
|
gem.add_development_dependency "rspec"
|
15
15
|
gem.add_development_dependency "cucumber"
|
16
|
-
gem.add_dependency(%q<rubygems-update>, [">= 1.3.2"])
|
17
16
|
gem.add_dependency(%q<thor>, [">= 0.11.7"])
|
18
|
-
gem.add_dependency(%q<grit>, ["
|
17
|
+
gem.add_dependency(%q<grit>, ["= 1.1.1"])
|
19
18
|
gem.add_dependency(%q<git_remote_branch>, [">= 0.3.0"])
|
20
19
|
gem.add_dependency(%q<systemu>, [">= 1.2.0"])
|
21
20
|
gem.add_dependency(%q<term-ansicolor>, [">= 1.0.3"])
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.10
|
data/bard.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bard}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.10"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Micah Geisel", "Nick Hogle"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-08}
|
13
13
|
s.default_executable = %q{bard}
|
14
14
|
s.description = %q{This immaculate work of engineering genius allows mere mortals to collaborate with beings of transcendent intelligence like Micah, Michael, and Nick.}
|
15
15
|
s.email = %q{info@botandrose.com}
|
@@ -51,11 +51,11 @@ Gem::Specification.new do |s|
|
|
51
51
|
s.homepage = %q{http://github.com/botandrose/bard}
|
52
52
|
s.rdoc_options = ["--charset=UTF-8"]
|
53
53
|
s.require_paths = ["lib"]
|
54
|
-
s.rubygems_version = %q{1.3.
|
54
|
+
s.rubygems_version = %q{1.3.5}
|
55
55
|
s.summary = %q{Tools for collaborating with Bot and Rose Design.}
|
56
56
|
s.test_files = [
|
57
|
-
"spec/
|
58
|
-
"spec/
|
57
|
+
"spec/bard_spec.rb",
|
58
|
+
"spec/spec_helper.rb"
|
59
59
|
]
|
60
60
|
|
61
61
|
if s.respond_to? :specification_version then
|
@@ -66,9 +66,8 @@ Gem::Specification.new do |s|
|
|
66
66
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
67
67
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
68
68
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
69
|
-
s.add_runtime_dependency(%q<rubygems-update>, [">= 1.3.2"])
|
70
69
|
s.add_runtime_dependency(%q<thor>, [">= 0.11.7"])
|
71
|
-
s.add_runtime_dependency(%q<grit>, ["
|
70
|
+
s.add_runtime_dependency(%q<grit>, ["= 1.1.1"])
|
72
71
|
s.add_runtime_dependency(%q<git_remote_branch>, [">= 0.3.0"])
|
73
72
|
s.add_runtime_dependency(%q<systemu>, [">= 1.2.0"])
|
74
73
|
s.add_runtime_dependency(%q<term-ansicolor>, [">= 1.0.3"])
|
@@ -76,9 +75,8 @@ Gem::Specification.new do |s|
|
|
76
75
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
77
76
|
s.add_dependency(%q<rspec>, [">= 0"])
|
78
77
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
79
|
-
s.add_dependency(%q<rubygems-update>, [">= 1.3.2"])
|
80
78
|
s.add_dependency(%q<thor>, [">= 0.11.7"])
|
81
|
-
s.add_dependency(%q<grit>, ["
|
79
|
+
s.add_dependency(%q<grit>, ["= 1.1.1"])
|
82
80
|
s.add_dependency(%q<git_remote_branch>, [">= 0.3.0"])
|
83
81
|
s.add_dependency(%q<systemu>, [">= 1.2.0"])
|
84
82
|
s.add_dependency(%q<term-ansicolor>, [">= 1.0.3"])
|
@@ -87,11 +85,11 @@ Gem::Specification.new do |s|
|
|
87
85
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
88
86
|
s.add_dependency(%q<rspec>, [">= 0"])
|
89
87
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
90
|
-
s.add_dependency(%q<rubygems-update>, [">= 1.3.2"])
|
91
88
|
s.add_dependency(%q<thor>, [">= 0.11.7"])
|
92
|
-
s.add_dependency(%q<grit>, ["
|
89
|
+
s.add_dependency(%q<grit>, ["= 1.1.1"])
|
93
90
|
s.add_dependency(%q<git_remote_branch>, [">= 0.3.0"])
|
94
91
|
s.add_dependency(%q<systemu>, [">= 1.2.0"])
|
95
92
|
s.add_dependency(%q<term-ansicolor>, [">= 1.0.3"])
|
96
93
|
end
|
97
94
|
end
|
95
|
+
|
data/features/bard_check.feature
CHANGED
@@ -20,7 +20,7 @@ Feature: Bard can check its environment for missing dependencies and potential p
|
|
20
20
|
|
21
21
|
Scenario: Bard check detects pending migrations
|
22
22
|
Given a shared rails project
|
23
|
-
And
|
23
|
+
And a commit with a new migration
|
24
24
|
When I type "bard check"
|
25
25
|
Then I should see the fatal error "pending migrations"
|
26
26
|
|
@@ -46,8 +46,8 @@ Feature: Bard can check its environment for missing dependencies and potential p
|
|
46
46
|
|
47
47
|
Scenario: Bard check detects missing gems
|
48
48
|
Given a shared rails project
|
49
|
-
And
|
50
|
-
And
|
49
|
+
And the test gem is not installed
|
50
|
+
And a commit that adds the test gem as a dependency
|
51
51
|
When I type "bard check"
|
52
52
|
Then I should see the fatal error "missing gems"
|
53
53
|
|
@@ -73,26 +73,26 @@ Feature: Bard can check its environment for missing dependencies and potential p
|
|
73
73
|
Given a shared rails project
|
74
74
|
And my "RAILS_ENV" environment variable is "staging"
|
75
75
|
And there is no git hook on the staging server
|
76
|
-
When I type "bard check"
|
76
|
+
When on staging, I type "bard check"
|
77
77
|
Then I should see the fatal error "missing git hook"
|
78
78
|
|
79
79
|
Scenario: Bard check detects unexecutable staging hook
|
80
80
|
Given a shared rails project
|
81
81
|
And my "RAILS_ENV" environment variable is "staging"
|
82
82
|
And the git hook on the staging server is not executable
|
83
|
-
When I type "bard check"
|
83
|
+
When on staging, I type "bard check"
|
84
84
|
Then I should see the fatal error "unexecutable git hook"
|
85
85
|
|
86
86
|
Scenario: Bard check detects improper staging hook
|
87
87
|
Given a shared rails project
|
88
88
|
And my "RAILS_ENV" environment variable is "staging"
|
89
89
|
And the git hook on the staging server is bad
|
90
|
-
When I type "bard check"
|
90
|
+
When on staging, I type "bard check"
|
91
91
|
Then I should see the fatal error "improper git hook"
|
92
92
|
|
93
93
|
Scenario: Bard check detects missing receive.denyCurrentBranch git variable on staging
|
94
94
|
Given a shared rails project
|
95
95
|
And my "RAILS_ENV" environment variable is "staging"
|
96
96
|
And the staging server git config for receive.denyCurrentBranch is not "ignore"
|
97
|
-
When I type "bard check"
|
97
|
+
When on staging, I type "bard check"
|
98
98
|
Then I should see the fatal error "denyCurrentBranch"
|
@@ -2,14 +2,14 @@ Feature: Bard deploy should fold the integration branch into master and perform
|
|
2
2
|
|
3
3
|
Scenario: Bard deploy detects non-fast-forward merge from integration to master
|
4
4
|
Given a shared rails project
|
5
|
-
And
|
6
|
-
And
|
5
|
+
And on staging, a commit to the master branch
|
6
|
+
And a commit
|
7
7
|
When I type "bard deploy"
|
8
8
|
Then I should see the fatal error "Rebase"
|
9
9
|
|
10
10
|
Scenario: Bard deploy works
|
11
11
|
Given a shared rails project
|
12
|
-
And
|
12
|
+
And a commit
|
13
13
|
When I type "bard deploy"
|
14
14
|
Then the "master" branch should match the "integration" branch
|
15
15
|
And the "integration" branch should match the "origin/integration" branch
|
data/features/bard_pull.feature
CHANGED
@@ -3,12 +3,12 @@ Feature: bard pull
|
|
3
3
|
Given a shared rails project
|
4
4
|
|
5
5
|
Scenario: Pulling down the latest changes from the remote integration branch
|
6
|
-
Given
|
6
|
+
Given on staging, a commit
|
7
7
|
When I type "bard pull"
|
8
8
|
Then the "integration" branch should match the "origin/integration" branch
|
9
9
|
|
10
10
|
Scenario: Pulling down when the latest changes include a submodule addition
|
11
|
-
Given
|
11
|
+
Given on staging, a commit with a new submodule
|
12
12
|
When I type "bard pull"
|
13
13
|
Then the "integration" branch should match the "origin/integration" branch
|
14
14
|
And there should be one new submodule
|
@@ -17,7 +17,7 @@ Feature: bard pull
|
|
17
17
|
|
18
18
|
Scenario: Pulling down when the latest changes include a submodule update
|
19
19
|
Given a submodule
|
20
|
-
And
|
20
|
+
And on staging, a commit
|
21
21
|
When I type "bard pull"
|
22
22
|
Then the "integration" branch should match the "origin/integration" branch
|
23
23
|
And the submodule branch should match the submodule origin branch
|
@@ -25,7 +25,7 @@ Feature: bard pull
|
|
25
25
|
|
26
26
|
Scenario: Pulling down when the latest changes include a submodule url change
|
27
27
|
Given a submodule
|
28
|
-
And
|
28
|
+
And on staging, a commit with a submodule url change
|
29
29
|
When I type "bard pull"
|
30
30
|
Then the "integration" branch should match the "origin/integration" branch
|
31
31
|
And the submodule url should be changed
|
@@ -35,14 +35,14 @@ Feature: bard pull
|
|
35
35
|
# TODO
|
36
36
|
#Scenario: Pulling down when the latest changes include a submodule deletion
|
37
37
|
# Given a submodule
|
38
|
-
# And
|
38
|
+
# And on staging, a commit with a submodule deletion
|
39
39
|
# When I type "bard pull"
|
40
40
|
# Then the "integration" branch should match the "origin/integration" branch
|
41
41
|
# And the submodule should be deleted
|
42
42
|
|
43
43
|
Scenario: Pulling latest changes from the remote integration branch after committing locally
|
44
|
-
Given
|
45
|
-
And
|
44
|
+
Given on staging, a commit
|
45
|
+
And a commit
|
46
46
|
When I type "bard pull"
|
47
47
|
Then I should see the warning "Someone has pushed some changes"
|
48
48
|
And the "integration" branch should be a fast-forward from the "origin/integration" branch
|
@@ -53,38 +53,40 @@ Feature: bard pull
|
|
53
53
|
Then I should see the fatal error "root directory"
|
54
54
|
|
55
55
|
Scenario: Trying to bard pull with a dirty working directory
|
56
|
-
Given
|
56
|
+
Given on staging, a commit
|
57
57
|
And a dirty working directory
|
58
58
|
When I type "bard pull"
|
59
59
|
Then I should see the fatal error "You have uncommitted changes!"
|
60
60
|
And the "integration" branch should not match the "origin/integration" branch
|
61
61
|
|
62
62
|
Scenario: Trying to bard pull when not on the integration branch
|
63
|
-
Given
|
63
|
+
Given on staging, a commit
|
64
64
|
And I am on a non-integration branch
|
65
65
|
When I type "bard pull"
|
66
66
|
Then I should see the fatal error "not on the integration branch"
|
67
67
|
And the "integration" branch should not match the "origin/integration" branch
|
68
68
|
|
69
69
|
Scenario: Pulling in a change that includes a migration on a dev machine
|
70
|
-
Given
|
71
|
-
And
|
70
|
+
Given on staging, a commit with a new migration
|
71
|
+
And a development database
|
72
72
|
When I type "bard pull"
|
73
73
|
Then the development database should include that migration
|
74
74
|
|
75
75
|
Scenario: Pulling in a change that includes a migration on a dev and testing machine
|
76
|
-
Given
|
77
|
-
And
|
76
|
+
Given on staging, a commit with a new migration
|
77
|
+
And a development database
|
78
|
+
And a test database
|
78
79
|
When I type "bard pull"
|
79
|
-
Then
|
80
|
+
Then the development database should include that migration
|
81
|
+
And the test database should include that migration
|
80
82
|
|
81
83
|
Scenario: Pulling in a change that includes a gem dependency change
|
82
|
-
Given
|
83
|
-
And
|
84
|
+
Given the test gem is not installed
|
85
|
+
And on staging, a commit that adds the test gem as a dependency
|
84
86
|
When I type "bard pull"
|
85
87
|
Then the test gem should be installed
|
86
88
|
|
87
89
|
Scenario: Pulling in a change should restart the rails server
|
88
|
-
Given
|
90
|
+
Given on staging, a commit
|
89
91
|
When I type "bard pull"
|
90
92
|
Then passenger should have been restarted
|
data/features/bard_push.feature
CHANGED
@@ -3,49 +3,51 @@ Feature: bard push
|
|
3
3
|
Given a shared rails project
|
4
4
|
|
5
5
|
Scenario: Uploading local changes onto the remote integration branch
|
6
|
-
Given
|
6
|
+
Given a commit
|
7
7
|
When I type "bard push"
|
8
8
|
Then the "integration" branch should match the "origin/integration" branch
|
9
9
|
|
10
10
|
Scenario: Pushing a change that includes a migration
|
11
|
-
Given
|
12
|
-
And
|
11
|
+
Given on staging, a staging database
|
12
|
+
And on staging, a test database
|
13
|
+
And a commit with a new migration
|
13
14
|
When I type "bard push"
|
14
|
-
Then
|
15
|
+
Then on staging, the staging database should include that migration
|
16
|
+
And on staging, the test database should include that migration
|
15
17
|
|
16
18
|
Scenario: Pushing a change that includes a gem dependency change
|
17
|
-
Given
|
18
|
-
And
|
19
|
+
Given the test gem is not installed
|
20
|
+
And a commit that adds the test gem as a dependency
|
19
21
|
When I type "bard push"
|
20
|
-
Then the test gem should be installed
|
22
|
+
Then on staging, the test gem should be installed
|
21
23
|
|
22
24
|
Scenario: Pushing a change should advance the staging HEAD and restart the staging rails server
|
23
|
-
Given
|
25
|
+
Given a commit
|
24
26
|
When I type "bard push"
|
25
|
-
Then the
|
26
|
-
And
|
27
|
+
Then on staging, the directory should not be dirty
|
28
|
+
And on staging, passenger should have been restarted
|
27
29
|
|
28
30
|
Scenario: Pushing a change that includes a submodule addition
|
29
|
-
Given
|
31
|
+
Given a commit with a new submodule
|
30
32
|
When I type "bard push"
|
31
|
-
Then there should be one new submodule
|
33
|
+
Then on staging, there should be one new submodule
|
32
34
|
And the submodule branch should match the submodule origin branch
|
33
|
-
|
35
|
+
And on staging, the submodule working directory should be clean
|
34
36
|
|
35
37
|
Scenario: Pushing a change that includes a submodule update
|
36
38
|
Given a submodule
|
37
|
-
And
|
39
|
+
And a commit with a submodule update
|
38
40
|
When I type "bard push"
|
39
41
|
Then the submodule branch should match the submodule origin branch
|
40
|
-
Then the
|
42
|
+
Then on staging, the submodule working directory should be clean
|
41
43
|
|
42
44
|
Scenario: Pushing a change that includes a submodule url change
|
43
45
|
Given a submodule
|
44
|
-
And
|
46
|
+
And a commit with a submodule url change
|
45
47
|
When I type "bard push"
|
46
|
-
Then the
|
48
|
+
Then on staging, the submodule url should be changed
|
47
49
|
And the submodule branch should match the submodule origin branch
|
48
|
-
Then the
|
50
|
+
Then on staging, the submodule working directory should be clean
|
49
51
|
|
50
52
|
# TODO
|
51
53
|
#Scenario: Pushing a change that includes a submodule deletion
|
@@ -60,29 +62,29 @@ Feature: bard push
|
|
60
62
|
Then I should see the fatal error "root directory"
|
61
63
|
|
62
64
|
Scenario: Trying to bard push when not on the integration branch
|
63
|
-
Given
|
65
|
+
Given a commit
|
64
66
|
And I am on a non-integration branch
|
65
67
|
When I type "bard push"
|
66
68
|
Then I should see the fatal error "not on the integration branch"
|
67
69
|
And the "integration" branch should not match the "origin/integration" branch
|
68
70
|
|
69
71
|
Scenario: Trying to bard push with a dirty working directory
|
70
|
-
Given
|
72
|
+
Given a commit
|
71
73
|
And a dirty working directory
|
72
74
|
When I type "bard push"
|
73
75
|
Then I should see the fatal error "You have uncommitted changes!"
|
74
76
|
And the "integration" branch should not match the "origin/integration" branch
|
75
77
|
|
76
78
|
Scenario: Trying to bard push with a non-fast-foward changeset
|
77
|
-
Given
|
78
|
-
And
|
79
|
+
Given a commit
|
80
|
+
And on staging, a commit
|
79
81
|
When I type "bard push"
|
80
82
|
Then I should see the fatal error "Someone has pushed some changes"
|
81
83
|
And the "integration" branch should not match the "origin/integration" branch
|
82
84
|
|
83
85
|
Scenario: Trying to bard push with an uncommitted change to a submodule
|
84
86
|
Given a submodule
|
85
|
-
And
|
87
|
+
And a commit
|
86
88
|
And the submodule working directory is dirty
|
87
89
|
When I type "bard push"
|
88
90
|
Then I should see the fatal error "Micah"
|
@@ -90,8 +92,8 @@ Feature: bard push
|
|
90
92
|
|
91
93
|
Scenario: Trying to bard push with a committed but unpushed change to a submodule
|
92
94
|
Given a submodule
|
93
|
-
And
|
94
|
-
And
|
95
|
+
And a commit to the submodule
|
96
|
+
And a commit
|
95
97
|
When I type "bard push"
|
96
98
|
Then I should see the fatal error "Micah"
|
97
99
|
And the "integration" branch should not match the "origin/integration" branch
|
@@ -5,7 +5,7 @@ end
|
|
5
5
|
|
6
6
|
Then /^I should see the current version of git$/ do
|
7
7
|
version = `git --version`[/[0-9]+\.[0-9]+\.[0-9]+/]
|
8
|
-
@stdout.should =~ /git\s+\(#{Regexp.escape(version)}
|
8
|
+
@stdout.should =~ /git\s+\(#{Regexp.escape(version)}/
|
9
9
|
end
|
10
10
|
|
11
11
|
Then /^I should see the current version of rubygems$/ do
|
@@ -11,14 +11,6 @@ Given /^there is no integration branch$/ do
|
|
11
11
|
type "git branch -d integration"
|
12
12
|
end
|
13
13
|
|
14
|
-
Given /^there is no integration branch on the staging server$/ do
|
15
|
-
type "git branch -d origin/integration"
|
16
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
17
|
-
type "git checkout master"
|
18
|
-
type "git branch -d integration"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
14
|
Given /^the integration branch isnt tracking origin\/integration$/ do
|
23
15
|
type "git checkout master"
|
24
16
|
type "git branch -d integration"
|
@@ -29,41 +21,26 @@ Given /^a dirty working directory$/ do
|
|
29
21
|
File.open("dirty_file", "w") { |f| f.puts "dirty dirty" }
|
30
22
|
end
|
31
23
|
|
32
|
-
Given /^
|
33
|
-
|
24
|
+
Given /^a commit$/ do
|
25
|
+
text = (rand * 100000000).round
|
26
|
+
type "echo '#{text}' > foobar_#{text}_file"
|
34
27
|
type "git add ."
|
35
|
-
type "git commit -am'test commit
|
36
|
-
end
|
37
|
-
|
38
|
-
Given /^the remote master branch has had a commit since I last pulled$/ do
|
39
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
40
|
-
type "git checkout master"
|
41
|
-
type "echo 'zomg' > origin_master_change_file"
|
42
|
-
type "git add ."
|
43
|
-
type "git commit -am 'testing origin master change'"
|
44
|
-
type "git checkout integration"
|
45
|
-
end
|
28
|
+
type "git commit -am'test commit'"
|
46
29
|
end
|
47
30
|
|
48
|
-
Given /^
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
31
|
+
Given /^a commit to the master branch$/ do
|
32
|
+
text = (rand * 100000000).round
|
33
|
+
type "git checkout master"
|
34
|
+
type "echo '#{text}' > master_#{text}_file"
|
35
|
+
type "git add ."
|
36
|
+
type "git commit -am 'testing master change'"
|
37
|
+
type "git checkout integration"
|
55
38
|
end
|
56
39
|
|
57
40
|
Then /^the directory should not be dirty$/ do
|
58
41
|
type("git status").should include "working directory clean"
|
59
42
|
end
|
60
43
|
|
61
|
-
Then /^the remote directory should not be dirty$/ do
|
62
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
63
|
-
type("git status").should include "working directory clean"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
44
|
Then /^I should be on the "([^\"]*)" branch$/ do |branch|
|
68
45
|
@repo.head.name.should == branch
|
69
46
|
end
|
@@ -1,36 +1,19 @@
|
|
1
1
|
Given /^a shared rails project$/ do
|
2
2
|
# TEARDOWN
|
3
|
-
Dir.
|
4
|
-
|
3
|
+
Dir.foreach "#{ROOT}/tmp" do |file|
|
4
|
+
FileUtils.rm_rf("#{ROOT}/tmp/#{file}") unless %w(fixtures . ..).include? file
|
5
|
+
end
|
5
6
|
|
6
7
|
# SETUP
|
7
8
|
Dir.chdir ROOT
|
8
|
-
|
9
|
-
type "cp -R fixtures/repo tmp/origin"
|
10
|
-
Dir.chdir 'tmp/origin' do
|
11
|
-
type "git config receive.denyCurrentBranch ignore"
|
12
|
-
File.open ".git/hooks/post-receive", "w" do |f|
|
13
|
-
f.puts <<-BASH
|
14
|
-
#!/bin/bash
|
15
|
-
RAILS_ENV=staging #{ROOT}/bin/bard stage $@
|
16
|
-
BASH
|
17
|
-
f.chmod 0775
|
18
|
-
end
|
19
|
-
type "cp config/database.sample.yml config/database.yml"
|
20
|
-
type "git checkout -b integration"
|
21
|
-
end
|
22
|
-
type "cp -R fixtures/repo tmp/submodule"
|
23
|
-
type "cp -R fixtures/repo tmp/submodule2"
|
24
|
-
type "git clone tmp/origin tmp/local"
|
9
|
+
`cp -r tmp/fixtures/* tmp/`
|
25
10
|
Dir.chdir 'tmp/local'
|
26
11
|
@repo = Grit::Repo.new "."
|
27
|
-
|
28
|
-
type "git checkout integration"
|
29
|
-
type "cp config/database.sample.yml config/database.yml"
|
12
|
+
|
30
13
|
end
|
31
14
|
|
32
15
|
Given /^I am in a subdirectory$/ do
|
33
|
-
|
16
|
+
FileUtils.mkdir "test_subdirectory"
|
34
17
|
Dir.chdir "test_subdirectory"
|
35
18
|
end
|
36
19
|
|
@@ -38,9 +21,9 @@ When /^I type "([^\"]*)"$/ do |command|
|
|
38
21
|
type command.sub /\b(bard)\b/, "#{ROOT}/bin/bard"
|
39
22
|
end
|
40
23
|
|
41
|
-
When /^
|
24
|
+
When /^on staging, (.*$)/ do |step|
|
42
25
|
Dir.chdir "#{ROOT}/tmp/origin" do
|
43
|
-
When
|
26
|
+
When step
|
44
27
|
end
|
45
28
|
end
|
46
29
|
|
@@ -1,92 +1,30 @@
|
|
1
|
-
Given /^
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
type "git commit -am'added test migration.'"
|
6
|
-
end
|
1
|
+
Given /^a commit with a new migration$/ do
|
2
|
+
type "script/generate migration test_migration"
|
3
|
+
type "git add ."
|
4
|
+
type "git commit -am'added test migration.'"
|
7
5
|
end
|
8
6
|
|
9
|
-
Given /^
|
10
|
-
|
11
|
-
type "script/generate migration test_migration"
|
12
|
-
type "git add ."
|
13
|
-
type "git commit -am'added test migration.'"
|
14
|
-
end
|
7
|
+
Given /^a (\w+) database$/ do |env|
|
8
|
+
type "rake db:create RAILS_ENV=#{env} && rake db:migrate RAILS_ENV=#{env}"
|
15
9
|
end
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
11
|
+
Then /^the (\w+) database should include that migration$/ do |env|
|
12
|
+
db_version = type("rake db:version RAILS_ENV=#{env}")[/[0-9]{14}/]
|
13
|
+
migration_version = type("ls db/migrate/*_test_migration.rb")[/[0-9]{14}/]
|
14
|
+
db_version.should == migration_version
|
22
15
|
end
|
23
16
|
|
24
|
-
Given /^the
|
25
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
26
|
-
type "rake db:create RAILS_ENV=staging && rake db:create RAILS_ENV=test"
|
27
|
-
type "rake db:migrate RAILS_ENV=staging && rake db:migrate RAILS_ENV=test"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
Given /^I have development and test environments set up locally$/ do
|
32
|
-
Dir.chdir "#{ROOT}/tmp/local" do
|
33
|
-
type "rake db:create && rake db:create RAILS_ENV=test"
|
34
|
-
type "rake db:migrate && rake db:migrate RAILS_ENV=test"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
Then /^the development database should include that migration$/ do
|
39
|
-
Dir.chdir "#{ROOT}/tmp/local" do
|
40
|
-
db_version = type("rake db:version")[/[0-9]{14}/]
|
41
|
-
test_migration_version = type("ls db/migrate/*_test_migration.rb")[/[0-9]{14}/]
|
42
|
-
db_version.should == test_migration_version
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
Then /^the both the staging and test databases should include that migration$/ do
|
47
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
48
|
-
staging_db_version = type("rake db:version RAILS_ENV=staging")[/[0-9]{14}/]
|
49
|
-
test_db_version = type("rake db:version RAILS_ENV=test")[/[0-9]{14}/]
|
50
|
-
test_migration_version = type("ls db/migrate/*_test_migration.rb")[/[0-9]{14}/]
|
51
|
-
staging_db_version.should == test_migration_version
|
52
|
-
test_db_version.should == test_migration_version
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
Then /^both the development and test databases should include that migration$/ do
|
57
|
-
Dir.chdir "#{ROOT}/tmp/local" do
|
58
|
-
dev_db_version = type("rake db:version")[/[0-9]{14}/]
|
59
|
-
test_db_version = type("rake db:version RAILS_ENV=test")[/[0-9]{14}/]
|
60
|
-
test_migration_version = type("ls db/migrate/*_test_migration.rb")[/[0-9]{14}/]
|
61
|
-
dev_db_version.should == test_migration_version
|
62
|
-
test_db_version.should == test_migration_version
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
Given /^I dont have the test gem installed$/ do
|
17
|
+
Given /^the test gem is not installed$/ do
|
67
18
|
type "gem uninstall rake-dotnet -v=0.0.1 -x"
|
68
19
|
end
|
69
20
|
|
70
|
-
Given /^
|
71
|
-
|
72
|
-
file_inject "config/environment.rb", "
|
73
|
-
Rails::Initializer.run do |config|", <<-RUBY
|
74
|
-
config.gem "rake-dotnet", :version => "0.0.1"
|
75
|
-
RUBY
|
76
|
-
type "git add ."
|
77
|
-
type "git commit -am'added test gem dependency.'"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
Given /^the remote integration branch has had a commit that adds the test gem as a dependency$/ do
|
82
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
83
|
-
file_inject "config/environment.rb", "
|
21
|
+
Given /^a commit that adds the test gem as a dependency$/ do
|
22
|
+
file_inject "config/environment.rb", "
|
84
23
|
Rails::Initializer.run do |config|", <<-RUBY
|
85
24
|
config.gem "rake-dotnet", :version => "0.0.1"
|
86
25
|
RUBY
|
87
|
-
|
88
|
-
|
89
|
-
end
|
26
|
+
type "git add ."
|
27
|
+
type "git commit -am'added test gem dependency.'"
|
90
28
|
end
|
91
29
|
|
92
30
|
Then /^the test gem should be installed$/ do
|
@@ -96,9 +34,3 @@ end
|
|
96
34
|
Then /^passenger should have been restarted$/ do
|
97
35
|
File.exist?("tmp/restart.txt").should be_true
|
98
36
|
end
|
99
|
-
|
100
|
-
Then /^the staging passenger should have been restarted$/ do
|
101
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
102
|
-
File.exist?("tmp/restart.txt").should be_true
|
103
|
-
end
|
104
|
-
end
|
@@ -1,44 +1,32 @@
|
|
1
1
|
Given /^a submodule$/ do
|
2
|
-
Given '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
type "git checkout master"
|
10
|
-
end
|
11
|
-
@submodule_url = File.read(".gitmodules").match(/url = (.*)$/)[1]
|
12
|
-
@submodule_commit = type "git submodule status"
|
2
|
+
Given 'on staging, a commit with a new submodule'
|
3
|
+
type "git checkout integration"
|
4
|
+
type "git pull --rebase"
|
5
|
+
type "git submodule init"
|
6
|
+
type "git submodule update"
|
7
|
+
Dir.chdir "submodule" do
|
8
|
+
type "git checkout master"
|
13
9
|
end
|
10
|
+
@submodule_url = File.read(".gitmodules").match(/url = (.*)$/)[1]
|
11
|
+
@submodule_commit = type "git submodule status"
|
14
12
|
end
|
15
13
|
|
16
14
|
Given /^the submodule working directory is dirty$/ do
|
17
|
-
Dir.chdir "
|
15
|
+
Dir.chdir "submodule" do
|
18
16
|
type "git checkout master"
|
19
17
|
type "echo 'submodule_update' > submodule_update"
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
23
|
-
Given /^
|
24
|
-
Dir.chdir "
|
21
|
+
Given /^a commit to the submodule$/ do
|
22
|
+
Dir.chdir "submodule" do
|
25
23
|
type "echo 'submodule_update' > submodule_update"
|
26
24
|
type "git add ."
|
27
25
|
type "git commit -am 'update in submodule'"
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
31
|
-
Given /^
|
32
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
33
|
-
type "git submodule add #{ROOT}/tmp/submodule submodule"
|
34
|
-
type "git submodule init"
|
35
|
-
type "git submodule update"
|
36
|
-
type "git add ."
|
37
|
-
type "git commit -m 'added submodule'"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
Given /^I have committed a set of changes that includes a new submodule$/ do
|
29
|
+
Given /^a commit with a new submodule$/ do
|
42
30
|
type "git submodule add #{ROOT}/tmp/submodule submodule"
|
43
31
|
type "git submodule init"
|
44
32
|
type "git submodule update --merge"
|
@@ -49,7 +37,7 @@ Given /^I have committed a set of changes that includes a new submodule$/ do
|
|
49
37
|
type "git commit -m 'added submodule'"
|
50
38
|
end
|
51
39
|
|
52
|
-
Given /^
|
40
|
+
Given /^a commit with a submodule update$/ do
|
53
41
|
type "git checkout integration"
|
54
42
|
Dir.chdir "submodule" do
|
55
43
|
type "git checkout master"
|
@@ -62,62 +50,24 @@ Given /^I have committed a set of changes that includes a submodule update$/ do
|
|
62
50
|
type "git commit -m 'updated submodule'"
|
63
51
|
end
|
64
52
|
|
65
|
-
Given /^
|
66
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
67
|
-
Dir.chdir "submodule" do
|
68
|
-
type "git checkout master"
|
69
|
-
type "echo 'submodule_update' > submodule_update"
|
70
|
-
type "git add ."
|
71
|
-
type "git commit -m 'update in submodule'"
|
72
|
-
type "git push origin HEAD"
|
73
|
-
end
|
74
|
-
type "git add ."
|
75
|
-
type "git commit -m 'updated submodule'"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
Given /^I have committed a set of changes that includes a submodule url change$/ do
|
53
|
+
Given /^a commit with a submodule url change$/ do
|
80
54
|
gsub_file ".gitmodules", /(url = .*submodule)$/ do |match| "#{match}2" end
|
81
55
|
type "git add ."
|
82
56
|
type "git commit -m 'updated submodule url'"
|
83
57
|
end
|
84
58
|
|
85
|
-
Given /^
|
86
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
87
|
-
gsub_file ".gitmodules", /(url = .*submodule)$/ do |match| "#{match}2" end
|
88
|
-
type "git add ."
|
89
|
-
type "git commit -m 'updated submodule url'"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
Given /^I have committed a set of changes that includes a submodule deletion$/ do
|
59
|
+
Given /^I a commit a with a submodule deletion$/ do
|
94
60
|
type "rm .gitmodules"
|
95
61
|
type "rm -rf --cached submodule"
|
96
62
|
type "git add ."
|
97
63
|
type "git commit -am'removed submodule'"
|
98
64
|
end
|
99
65
|
|
100
|
-
Given /^the remote integration branch has had a commit that includes a submodule deletion$/ do
|
101
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
102
|
-
type "rm .gitmodules"
|
103
|
-
type "rm -rf --cached submodule"
|
104
|
-
type "git add ."
|
105
|
-
type "git commit -am'removed submodule'"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
66
|
Then /^there should be one new submodule$/ do
|
110
67
|
status = type "git submodule status"
|
111
68
|
status.should match /.[a-z0-9]{40} submodule/
|
112
69
|
end
|
113
70
|
|
114
|
-
Then /^there should be one new submodule on the remote$/ do
|
115
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
116
|
-
status = type "git submodule status"
|
117
|
-
status.should match /.[a-z0-9]{40} submodule/
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
71
|
Then /^the submodule branch should match the submodule origin branch$/ do
|
122
72
|
@submodule_url = File.read(".gitmodules").match(/url = (.*)$/)[1]
|
123
73
|
@submodule_commit = type "git submodule status"
|
@@ -134,24 +84,16 @@ Then /^the submodule branch should match the submodule origin branch$/ do
|
|
134
84
|
end
|
135
85
|
end
|
136
86
|
|
137
|
-
Then /^the
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
@submodule_commit.should match %r( [a-z0-9]{40} submodule)
|
142
|
-
end
|
87
|
+
Then /^the submodule should be checked out$/ do
|
88
|
+
@submodule_url = File.read(".gitmodules").match(/url = (.*)$/)[1]
|
89
|
+
@submodule_commit = type "git submodule status"
|
90
|
+
@submodule_commit.should match %r( [a-z0-9]{40} submodule)
|
143
91
|
end
|
144
92
|
|
145
93
|
Then /^the submodule should be updated$/ do
|
146
94
|
@submodule_commit[/[a-z0-9]{40}/].should_not == type("git submodule status")[/[a-z0-9]{40}/]
|
147
95
|
end
|
148
96
|
|
149
|
-
Then /^the remote submodule should be updated$/ do
|
150
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
151
|
-
@submodule_commit[/[a-z0-9]{40}/].should_not == type("git submodule status")[/[a-z0-9]{40}/]
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
97
|
Then /^the submodule url should be changed$/ do
|
156
98
|
Dir.chdir "submodule" do
|
157
99
|
remote = type "git remote show origin"
|
@@ -160,14 +102,6 @@ Then /^the submodule url should be changed$/ do
|
|
160
102
|
end
|
161
103
|
end
|
162
104
|
|
163
|
-
Then /^the remote submodule url should be changed$/ do
|
164
|
-
Dir.chdir "#{ROOT}/tmp/origin/submodule" do
|
165
|
-
remote = type "git remote show origin"
|
166
|
-
remote.should_not match %r(Fetch URL: #{@submodule_url}$)
|
167
|
-
remote.should_not match %r(Push URL: #{@submodule_url}$)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
105
|
Then /^the submodule should be deleted$/ do
|
172
106
|
Then 'the directory should not be dirty'
|
173
107
|
@submodule_commit = type "git submodule status"
|
@@ -175,22 +109,8 @@ Then /^the submodule should be deleted$/ do
|
|
175
109
|
|
176
110
|
end
|
177
111
|
|
178
|
-
Then /^the remote submodule should be deleted$/ do
|
179
|
-
Then 'the remote directory should not be dirty'
|
180
|
-
Dir.chdir "#{ROOT}/tmp/origin" do
|
181
|
-
@submodule_commit = type "git submodule status"
|
182
|
-
@submodule_commit.should_not match /.[a-z0-9]{40} submodule/
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
112
|
Then /^the submodule working directory should be clean$/ do
|
187
113
|
Dir.chdir "submodule" do
|
188
114
|
type("git status").should include "working directory clean"
|
189
115
|
end
|
190
116
|
end
|
191
|
-
|
192
|
-
Then /^the remote submodule working directory should be clean$/ do
|
193
|
-
Dir.chdir "#{ROOT}/tmp/origin/submodule" do
|
194
|
-
type("git status").should include "working directory clean"
|
195
|
-
end
|
196
|
-
end
|
data/features/support/env.rb
CHANGED
@@ -3,7 +3,36 @@ require 'ruby-debug'
|
|
3
3
|
require 'grit'
|
4
4
|
require 'spec/expectations'
|
5
5
|
require 'systemu'
|
6
|
+
gem 'sqlite3-ruby'
|
6
7
|
|
7
8
|
ENV["PATH"] += ":#{File.dirname(File.expand_path(__FILE__))}/../../bin"
|
8
9
|
|
9
10
|
ROOT = File.expand_path(File.dirname(__FILE__) + '/../..')
|
11
|
+
|
12
|
+
# setup fixtures
|
13
|
+
FileUtils.rm_rf "tmp"
|
14
|
+
FileUtils.mkdir "tmp"
|
15
|
+
FileUtils.cp_r "fixtures/repo", "tmp/origin"
|
16
|
+
Dir.chdir 'tmp/origin' do
|
17
|
+
`git config receive.denyCurrentBranch ignore`
|
18
|
+
File.open ".git/hooks/post-receive", "w" do |f|
|
19
|
+
f.puts <<-BASH
|
20
|
+
#!/bin/bash
|
21
|
+
RAILS_ENV=staging #{ROOT}/bin/bard stage $@
|
22
|
+
BASH
|
23
|
+
f.chmod 0775
|
24
|
+
end
|
25
|
+
FileUtils.cp "config/database.sample.yml", "config/database.yml"
|
26
|
+
`git checkout -b integration`
|
27
|
+
end
|
28
|
+
FileUtils.cp_r "fixtures/repo", "tmp/submodule"
|
29
|
+
FileUtils.cp_r "fixtures/repo", "tmp/submodule2"
|
30
|
+
`git clone tmp/origin tmp/local`
|
31
|
+
Dir.chdir 'tmp/local' do
|
32
|
+
`grb fetch integration && git checkout integration`
|
33
|
+
FileUtils.cp "config/database.sample.yml", "config/database.yml"
|
34
|
+
end
|
35
|
+
FileUtils.mkdir "tmp/fixtures"
|
36
|
+
Dir.foreach "tmp" do |file|
|
37
|
+
FileUtils.mv("tmp/#{file}", "tmp/fixtures/") unless %w(fixtures . ..).include? file
|
38
|
+
end
|
data/lib/bard/check.rb
CHANGED
@@ -2,7 +2,7 @@ class Bard < Thor
|
|
2
2
|
private
|
3
3
|
def check_dependencies
|
4
4
|
required = {
|
5
|
-
'bard' => Net::HTTP.get(URI.parse("http://gemcutter.org/gems/bard.json")).match(/"version":"([0-9.]+)"/)[1],
|
5
|
+
'bard' => Net::HTTP.get(URI.parse("http://gemcutter.org/api/v1/gems/bard.json")).match(/"version":"([0-9.]+)"/)[1],
|
6
6
|
'git' => '1.6.4',
|
7
7
|
'rubygems' => '1.3.4',
|
8
8
|
'ruby' => '1.8.6'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-12-08 00:00:00 -08:00
|
14
14
|
default_executable: bard
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -43,16 +43,6 @@ dependencies:
|
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: "0"
|
45
45
|
version:
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rubygems-update
|
48
|
-
type: :runtime
|
49
|
-
version_requirement:
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.3.2
|
55
|
-
version:
|
56
46
|
- !ruby/object:Gem::Dependency
|
57
47
|
name: thor
|
58
48
|
type: :runtime
|
@@ -69,7 +59,7 @@ dependencies:
|
|
69
59
|
version_requirement:
|
70
60
|
version_requirements: !ruby/object:Gem::Requirement
|
71
61
|
requirements:
|
72
|
-
- - "
|
62
|
+
- - "="
|
73
63
|
- !ruby/object:Gem::Version
|
74
64
|
version: 1.1.1
|
75
65
|
version:
|
@@ -165,10 +155,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
155
|
requirements: []
|
166
156
|
|
167
157
|
rubyforge_project:
|
168
|
-
rubygems_version: 1.3.
|
158
|
+
rubygems_version: 1.3.5
|
169
159
|
signing_key:
|
170
160
|
specification_version: 3
|
171
161
|
summary: Tools for collaborating with Bot and Rose Design.
|
172
162
|
test_files:
|
173
|
-
- spec/spec_helper.rb
|
174
163
|
- spec/bard_spec.rb
|
164
|
+
- spec/spec_helper.rb
|