bard 0.6.9 → 0.6.10
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 +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
|