auto_tagger 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -1
- data/CHANGELOG +26 -2
- data/Gemfile +4 -4
- data/Gemfile.lock +60 -0
- data/README.md +90 -36
- data/Rakefile +1 -26
- data/VERSION +1 -1
- data/auto_tagger.gemspec +24 -14
- data/bin/autotag +14 -29
- data/features/autotag.feature +43 -2
- data/features/deployment.feature +4 -0
- data/features/step_definitions/autotag_steps.rb +27 -22
- data/features/step_definitions/deployment_steps.rb +41 -33
- data/features/support/env.rb +45 -2
- data/features/support/step_helpers.rb +36 -12
- data/features/templates/deploy.erb +1 -1
- data/lib/auto_tagger/base.rb +150 -19
- data/lib/auto_tagger/capistrano_helper.rb +38 -17
- data/lib/auto_tagger/command_line.rb +65 -0
- data/lib/auto_tagger/commander.rb +22 -11
- data/lib/auto_tagger/configuration.rb +88 -0
- data/lib/auto_tagger/deprecator.rb +11 -0
- data/lib/auto_tagger/git/ref.rb +34 -0
- data/lib/auto_tagger/git/ref_set.rb +35 -0
- data/lib/auto_tagger/git/repo.rb +76 -0
- data/lib/auto_tagger/options.rb +170 -0
- data/lib/auto_tagger/recipes.rb +67 -27
- data/lib/auto_tagger.rb +9 -4
- data/spec/auto_tagger/base_spec.rb +236 -52
- data/spec/auto_tagger/capistrano_helper_spec.rb +82 -112
- data/spec/auto_tagger/command_line_spec.rb +110 -0
- data/spec/auto_tagger/commander_spec.rb +33 -7
- data/spec/auto_tagger/configuration_spec.rb +275 -0
- data/spec/auto_tagger/git/ref_set_spec.rb +61 -0
- data/spec/auto_tagger/git/ref_spec.rb +46 -0
- data/spec/auto_tagger/git/repo_spec.rb +108 -0
- data/spec/auto_tagger/options_spec.rb +157 -0
- data/spec/spec_helper.rb +1 -6
- metadata +32 -15
- data/geminstaller.yml +0 -7
- data/lib/auto_tagger/repository.rb +0 -43
- data/lib/auto_tagger/stage_manager.rb +0 -23
- data/lib/auto_tagger/tag.rb +0 -43
- data/spec/auto_tagger/repository_spec.rb +0 -72
- data/spec/auto_tagger/stage_manager_spec.rb +0 -34
- data/spec/auto_tagger/tag_spec.rb +0 -66
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AutoTagger::Options do
|
4
|
+
|
5
|
+
shared_examples_for "common options" do
|
6
|
+
it "understands --date-separator" do
|
7
|
+
options = AutoTagger::Options.from_command_line ["--date-separator=-"]
|
8
|
+
options[:date_separator].should == "-"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "understands --remote" do
|
12
|
+
options = AutoTagger::Options.from_command_line ["--remote=origin"]
|
13
|
+
options[:remote].should == "origin"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "understands --ref-path" do
|
17
|
+
options = AutoTagger::Options.from_command_line ["--ref-path=tags"]
|
18
|
+
options[:ref_path].should == "tags"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "understands --stages" do
|
22
|
+
options = AutoTagger::Options.from_command_line ["--stages=foo,bar,baz"]
|
23
|
+
options[:stages].should == "foo,bar,baz"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "understands --refs-to-keep" do
|
27
|
+
options = AutoTagger::Options.from_command_line ["--refs-to-keep=4"]
|
28
|
+
options[:refs_to_keep].should == 4
|
29
|
+
end
|
30
|
+
|
31
|
+
it "understands --dry-run" do
|
32
|
+
options = AutoTagger::Options.from_command_line ["--dry-run"]
|
33
|
+
options[:dry_run].should be_true
|
34
|
+
|
35
|
+
options = AutoTagger::Options.from_command_line ["--dry-run=true"]
|
36
|
+
options[:dry_run].should be_true
|
37
|
+
|
38
|
+
options = AutoTagger::Options.from_command_line ["--dry-run=false"]
|
39
|
+
options[:dry_run].should be_false
|
40
|
+
end
|
41
|
+
|
42
|
+
it "understands --fetch-refs" do
|
43
|
+
options = AutoTagger::Options.from_command_line ["--fetch-refs=true"]
|
44
|
+
options[:fetch_refs].should == true
|
45
|
+
|
46
|
+
options = AutoTagger::Options.from_command_line ["--fetch-refs=false"]
|
47
|
+
options[:fetch_refs].should == false
|
48
|
+
end
|
49
|
+
|
50
|
+
it "understands --push-refs" do
|
51
|
+
options = AutoTagger::Options.from_command_line ["--push-refs=true"]
|
52
|
+
options[:push_refs].should == true
|
53
|
+
|
54
|
+
options = AutoTagger::Options.from_command_line ["--push-refs=false"]
|
55
|
+
options[:push_refs].should == false
|
56
|
+
end
|
57
|
+
|
58
|
+
it "understands --offline" do
|
59
|
+
options = AutoTagger::Options.from_command_line ["--offline"]
|
60
|
+
options[:offline].should be_nil
|
61
|
+
|
62
|
+
options = AutoTagger::Options.from_command_line ["--offline=true"]
|
63
|
+
options[:offline].should be_true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#from_command_line" do
|
68
|
+
|
69
|
+
it_should_behave_like "common options"
|
70
|
+
|
71
|
+
it "takes the first argument to be the stage" do
|
72
|
+
options = AutoTagger::Options.from_command_line ["ci"]
|
73
|
+
options[:stage].should == "ci"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "takes the second argument to be the path" do
|
77
|
+
options = AutoTagger::Options.from_command_line ["ci", "../"]
|
78
|
+
options[:path].should == "../"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "understands --opts-file" do
|
82
|
+
options = AutoTagger::Options.from_command_line ["--opts-file=foo"]
|
83
|
+
options[:opts_file].should == "foo"
|
84
|
+
end
|
85
|
+
|
86
|
+
it "understands all help options" do
|
87
|
+
options = AutoTagger::Options.from_command_line ["ci"]
|
88
|
+
options[:show_help].should be_nil
|
89
|
+
|
90
|
+
options = AutoTagger::Options.from_command_line ["help"]
|
91
|
+
options[:show_help].should == true
|
92
|
+
|
93
|
+
options = AutoTagger::Options.from_command_line ["-h"]
|
94
|
+
options[:show_help].should == true
|
95
|
+
|
96
|
+
options = AutoTagger::Options.from_command_line ["--help"]
|
97
|
+
options[:show_help].should == true
|
98
|
+
|
99
|
+
options = AutoTagger::Options.from_command_line ["-?"]
|
100
|
+
options[:show_help].should == true
|
101
|
+
|
102
|
+
options = AutoTagger::Options.from_command_line []
|
103
|
+
options[:show_help].should == true
|
104
|
+
end
|
105
|
+
|
106
|
+
it "understands --version" do
|
107
|
+
options = AutoTagger::Options.from_command_line ["ci"]
|
108
|
+
options[:show_version].should be_nil
|
109
|
+
|
110
|
+
options = AutoTagger::Options.from_command_line ["version"]
|
111
|
+
options[:show_version].should == true
|
112
|
+
|
113
|
+
options = AutoTagger::Options.from_command_line ["--version"]
|
114
|
+
options[:show_version].should == true
|
115
|
+
|
116
|
+
options = AutoTagger::Options.from_command_line ["-v"]
|
117
|
+
options[:show_version].should == true
|
118
|
+
end
|
119
|
+
|
120
|
+
it "chooses the right command" do
|
121
|
+
options = AutoTagger::Options.from_command_line ["config"]
|
122
|
+
options[:command].should == :config
|
123
|
+
|
124
|
+
options = AutoTagger::Options.from_command_line ["version"]
|
125
|
+
options[:command].should == :version
|
126
|
+
|
127
|
+
options = AutoTagger::Options.from_command_line ["help"]
|
128
|
+
options[:command].should == :help
|
129
|
+
|
130
|
+
options = AutoTagger::Options.from_command_line [""]
|
131
|
+
options[:command].should == :help
|
132
|
+
|
133
|
+
options = AutoTagger::Options.from_command_line ["cleanup"]
|
134
|
+
options[:command].should == :cleanup
|
135
|
+
|
136
|
+
options = AutoTagger::Options.from_command_line ["list"]
|
137
|
+
options[:command].should == :list
|
138
|
+
|
139
|
+
options = AutoTagger::Options.from_command_line ["create"]
|
140
|
+
options[:command].should == :create
|
141
|
+
|
142
|
+
options = AutoTagger::Options.from_command_line ["ci"]
|
143
|
+
options[:command].should == :create
|
144
|
+
|
145
|
+
options = AutoTagger::Options.from_command_line ["delete_locally"]
|
146
|
+
options[:command].should == :delete_locally
|
147
|
+
|
148
|
+
options = AutoTagger::Options.from_command_line ["delete_on_remote"]
|
149
|
+
options[:command].should == :delete_on_remote
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "#from_file" do
|
154
|
+
it_should_behave_like "common options"
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto_tagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Jeff Dean
|
@@ -21,16 +22,18 @@ autorequire:
|
|
21
22
|
bindir: bin
|
22
23
|
cert_chain: []
|
23
24
|
|
24
|
-
date: 2010-
|
25
|
+
date: 2010-09-10 00:00:00 -04:00
|
25
26
|
default_executable: autotag
|
26
27
|
dependencies:
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: capistrano
|
29
30
|
prerelease: false
|
30
31
|
requirement: &id001 !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
31
33
|
requirements:
|
32
34
|
- - ">="
|
33
35
|
- !ruby/object:Gem::Version
|
36
|
+
hash: 29
|
34
37
|
segments:
|
35
38
|
- 2
|
36
39
|
- 5
|
@@ -51,6 +54,7 @@ files:
|
|
51
54
|
- .gitignore
|
52
55
|
- CHANGELOG
|
53
56
|
- Gemfile
|
57
|
+
- Gemfile.lock
|
54
58
|
- MIT-LICENSE
|
55
59
|
- README.md
|
56
60
|
- Rakefile
|
@@ -66,21 +70,27 @@ files:
|
|
66
70
|
- features/templates/cap_ext_deploy.erb
|
67
71
|
- features/templates/deploy.erb
|
68
72
|
- features/templates/stage.erb
|
69
|
-
- geminstaller.yml
|
70
73
|
- lib/auto_tagger.rb
|
71
74
|
- lib/auto_tagger/base.rb
|
72
75
|
- lib/auto_tagger/capistrano_helper.rb
|
76
|
+
- lib/auto_tagger/command_line.rb
|
73
77
|
- lib/auto_tagger/commander.rb
|
78
|
+
- lib/auto_tagger/configuration.rb
|
79
|
+
- lib/auto_tagger/deprecator.rb
|
80
|
+
- lib/auto_tagger/git/ref.rb
|
81
|
+
- lib/auto_tagger/git/ref_set.rb
|
82
|
+
- lib/auto_tagger/git/repo.rb
|
83
|
+
- lib/auto_tagger/options.rb
|
74
84
|
- lib/auto_tagger/recipes.rb
|
75
|
-
- lib/auto_tagger/repository.rb
|
76
|
-
- lib/auto_tagger/stage_manager.rb
|
77
|
-
- lib/auto_tagger/tag.rb
|
78
85
|
- spec/auto_tagger/base_spec.rb
|
79
86
|
- spec/auto_tagger/capistrano_helper_spec.rb
|
87
|
+
- spec/auto_tagger/command_line_spec.rb
|
80
88
|
- spec/auto_tagger/commander_spec.rb
|
81
|
-
- spec/auto_tagger/
|
82
|
-
- spec/auto_tagger/
|
83
|
-
- spec/auto_tagger/
|
89
|
+
- spec/auto_tagger/configuration_spec.rb
|
90
|
+
- spec/auto_tagger/git/ref_set_spec.rb
|
91
|
+
- spec/auto_tagger/git/ref_spec.rb
|
92
|
+
- spec/auto_tagger/git/repo_spec.rb
|
93
|
+
- spec/auto_tagger/options_spec.rb
|
84
94
|
- spec/spec_helper.rb
|
85
95
|
has_rdoc: true
|
86
96
|
homepage: http://github.com/zilkey/auto_tagger
|
@@ -92,31 +102,38 @@ rdoc_options:
|
|
92
102
|
require_paths:
|
93
103
|
- lib
|
94
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
95
106
|
requirements:
|
96
107
|
- - ">="
|
97
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
98
110
|
segments:
|
99
111
|
- 0
|
100
112
|
version: "0"
|
101
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
102
115
|
requirements:
|
103
116
|
- - ">="
|
104
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
105
119
|
segments:
|
106
120
|
- 0
|
107
121
|
version: "0"
|
108
122
|
requirements: []
|
109
123
|
|
110
124
|
rubyforge_project:
|
111
|
-
rubygems_version: 1.3.
|
125
|
+
rubygems_version: 1.3.7
|
112
126
|
signing_key:
|
113
127
|
specification_version: 3
|
114
128
|
summary: Helps you automatically create tags for each stage in a multi-stage deploment and deploy from the latest tag from the previous environment
|
115
129
|
test_files:
|
116
130
|
- spec/auto_tagger/base_spec.rb
|
117
131
|
- spec/auto_tagger/capistrano_helper_spec.rb
|
132
|
+
- spec/auto_tagger/command_line_spec.rb
|
118
133
|
- spec/auto_tagger/commander_spec.rb
|
119
|
-
- spec/auto_tagger/
|
120
|
-
- spec/auto_tagger/
|
121
|
-
- spec/auto_tagger/
|
134
|
+
- spec/auto_tagger/configuration_spec.rb
|
135
|
+
- spec/auto_tagger/git/ref_set_spec.rb
|
136
|
+
- spec/auto_tagger/git/ref_spec.rb
|
137
|
+
- spec/auto_tagger/git/repo_spec.rb
|
138
|
+
- spec/auto_tagger/options_spec.rb
|
122
139
|
- spec/spec_helper.rb
|
data/geminstaller.yml
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
module AutoTagger
|
2
|
-
class NoPathProvidedError < StandardError; end
|
3
|
-
class NoSuchPathError < StandardError; end
|
4
|
-
class InvalidGitRepositoryError < StandardError; end
|
5
|
-
class GitCommandFailedError < StandardError; end
|
6
|
-
|
7
|
-
class Repository
|
8
|
-
attr_reader :path
|
9
|
-
|
10
|
-
def initialize(path)
|
11
|
-
if path.to_s.strip == ""
|
12
|
-
raise NoPathProvidedError
|
13
|
-
elsif ! File.exists?(path)
|
14
|
-
raise NoSuchPathError
|
15
|
-
elsif ! File.exists?(File.join(path, ".git"))
|
16
|
-
raise InvalidGitRepositoryError
|
17
|
-
else
|
18
|
-
@path = path
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def ==(other)
|
23
|
-
other.is_a?(Repository) && other.path == path
|
24
|
-
end
|
25
|
-
|
26
|
-
def tags
|
27
|
-
@tags ||= Tag.new(self)
|
28
|
-
end
|
29
|
-
|
30
|
-
def commit_for(tag)
|
31
|
-
Commander.execute(path, "git --no-pager log #{tag} --pretty=oneline -1")
|
32
|
-
end
|
33
|
-
|
34
|
-
def run(cmd)
|
35
|
-
Commander.execute(path, cmd)
|
36
|
-
end
|
37
|
-
|
38
|
-
def run!(cmd)
|
39
|
-
Commander.execute?(path, cmd) || raise(GitCommandFailedError)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module AutoTagger
|
2
|
-
class StageManager
|
3
|
-
class NoStagesSpecifiedError < StandardError
|
4
|
-
def message
|
5
|
-
"You must set the :stages variable to an array, like set :stages, [:ci, :demo]"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_reader :stages
|
10
|
-
|
11
|
-
def initialize(stages)
|
12
|
-
raise NoStagesSpecifiedError unless stages && stages.is_a?(Array)
|
13
|
-
@stages = stages.map{|stage| stage.to_s }
|
14
|
-
end
|
15
|
-
|
16
|
-
def previous_stage(stage)
|
17
|
-
if stage
|
18
|
-
index = stages.index(stage.to_s) - 1
|
19
|
-
stages[index] if index > -1
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/auto_tagger/tag.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# git --no-pager log --pretty=oneline -1
|
2
|
-
# git tag -a -m 'Successful continuous integration build on #{timestamp}' #{tag_name}"
|
3
|
-
module AutoTagger
|
4
|
-
class Tag
|
5
|
-
|
6
|
-
attr_reader :repository
|
7
|
-
|
8
|
-
def initialize(repository)
|
9
|
-
@repository = repository
|
10
|
-
end
|
11
|
-
|
12
|
-
def find_all
|
13
|
-
repository.run("git tag").split("\n")
|
14
|
-
end
|
15
|
-
|
16
|
-
def fetch
|
17
|
-
repository.run! "git fetch origin --tags"
|
18
|
-
end
|
19
|
-
|
20
|
-
def latest_from(stage)
|
21
|
-
find_all.select{|tag| tag =~ /^#{stage}\//}.sort.last
|
22
|
-
end
|
23
|
-
|
24
|
-
def push
|
25
|
-
repository.run! "git push origin --tags"
|
26
|
-
end
|
27
|
-
|
28
|
-
def create(stage, commit = nil)
|
29
|
-
tag_name = name_for(stage)
|
30
|
-
cmd = "git tag #{tag_name}"
|
31
|
-
cmd += " #{commit}" if commit
|
32
|
-
repository.run! cmd
|
33
|
-
tag_name
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def name_for(stage)
|
39
|
-
"%s/%s" % [stage, Time.now.utc.strftime('%Y%m%d%H%M%S')]
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe AutoTagger::Repository do
|
4
|
-
describe ".new" do
|
5
|
-
it "sets the repo" do
|
6
|
-
mock(File).exists?(anything).twice { true }
|
7
|
-
repo = AutoTagger::Repository.new("/foo")
|
8
|
-
repo.path.should == "/foo"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "raises an error when the path is blank" do
|
12
|
-
proc do
|
13
|
-
AutoTagger::Repository.new(" ")
|
14
|
-
end.should raise_error(AutoTagger::NoPathProvidedError)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "raises an error when the path is nil" do
|
18
|
-
proc do
|
19
|
-
AutoTagger::Repository.new(nil)
|
20
|
-
end.should raise_error(AutoTagger::NoPathProvidedError)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "raises an error with a file that doesn't exist" do
|
24
|
-
mock(File).exists?("/foo") { false }
|
25
|
-
proc do
|
26
|
-
AutoTagger::Repository.new("/foo")
|
27
|
-
end.should raise_error(AutoTagger::NoSuchPathError)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises an error with a non-git repository" do
|
31
|
-
mock(File).exists?("/foo") { true }
|
32
|
-
mock(File).exists?("/foo/.git") { false }
|
33
|
-
proc do
|
34
|
-
AutoTagger::Repository.new("/foo")
|
35
|
-
end.should raise_error(AutoTagger::InvalidGitRepositoryError)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#==" do
|
40
|
-
it "compares paths" do
|
41
|
-
mock(File).exists?(anything).times(any_times) { true }
|
42
|
-
AutoTagger::Repository.new("/foo").should_not == "/foo"
|
43
|
-
AutoTagger::Repository.new("/foo").should_not == AutoTagger::Repository.new("/bar")
|
44
|
-
AutoTagger::Repository.new("/foo").should == AutoTagger::Repository.new("/foo")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#run" do
|
49
|
-
it "sends the correct command" do
|
50
|
-
mock(File).exists?(anything).twice { true }
|
51
|
-
mock(AutoTagger::Commander).execute("/foo", "bar")
|
52
|
-
AutoTagger::Repository.new("/foo").run("bar")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "run!" do
|
57
|
-
it "sends the correct command" do
|
58
|
-
mock(File).exists?(anything).twice { true }
|
59
|
-
mock(AutoTagger::Commander).execute?("/foo", "bar") { true }
|
60
|
-
AutoTagger::Repository.new("/foo").run!("bar")
|
61
|
-
end
|
62
|
-
|
63
|
-
it "raises an exception if it the command returns false" do
|
64
|
-
mock(File).exists?(anything).twice { true }
|
65
|
-
mock(AutoTagger::Commander).execute?("/foo", "bar") { false }
|
66
|
-
proc do
|
67
|
-
AutoTagger::Repository.new("/foo").run!("bar")
|
68
|
-
end.should raise_error(AutoTagger::GitCommandFailedError)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe AutoTagger::StageManager do
|
4
|
-
|
5
|
-
describe ".new" do
|
6
|
-
[nil, ""].each do |value|
|
7
|
-
it "blows up if there are stages == #{value.inspect}" do
|
8
|
-
proc do
|
9
|
-
AutoTagger::StageManager.new(value)
|
10
|
-
end.should raise_error(AutoTagger::StageManager::NoStagesSpecifiedError)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#previous_stage" do
|
16
|
-
it "returns the previous stage as a string if there is more than one stage, and there is a current stage" do
|
17
|
-
AutoTagger::StageManager.new([:foo, :bar]).previous_stage(:bar).should == "foo"
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns nil if there is no previous stage" do
|
21
|
-
AutoTagger::StageManager.new([:bar]).previous_stage(:bar).should be_nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "deals with mixed strings and symbols" do
|
25
|
-
AutoTagger::StageManager.new([:"foo-bar", "baz"]).previous_stage(:baz).should == "foo-bar"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns nil if there is no current stage" do
|
29
|
-
AutoTagger::StageManager.new([:bar]).previous_stage(nil).should be_nil
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe AutoTagger::Tag do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@repository = Object.new
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ".new" do
|
10
|
-
it "sets the repository" do
|
11
|
-
AutoTagger::Tag.new(@repository).repository.should == @repository
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#find_all" do
|
16
|
-
it "returns an array of tags" do
|
17
|
-
mock(@repository).run("git tag") { "ci_01\nci_02" }
|
18
|
-
AutoTagger::Tag.new(@repository).find_all.should == ["ci_01", "ci_02"]
|
19
|
-
end
|
20
|
-
|
21
|
-
it "returns an empty array if there are none" do
|
22
|
-
mock(@repository).run("git tag") { "" }
|
23
|
-
AutoTagger::Tag.new(@repository).find_all.should be_empty
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#latest_from" do
|
28
|
-
before do
|
29
|
-
@tag = AutoTagger::Tag.new(@repository)
|
30
|
-
mock(@tag).find_all { ["ci/01", "ci/02"] }
|
31
|
-
end
|
32
|
-
|
33
|
-
it "returns the latest tag that starts with the specified stage" do
|
34
|
-
@tag.latest_from(:ci).should == "ci/02"
|
35
|
-
end
|
36
|
-
|
37
|
-
it "returns nil if none match" do
|
38
|
-
@tag.latest_from(:staging).should be_nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#fetch_tags" do
|
43
|
-
it "sends the correct command" do
|
44
|
-
mock(@repository).run!("git fetch origin --tags")
|
45
|
-
AutoTagger::Tag.new(@repository).fetch
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#push" do
|
50
|
-
it "sends the correct command" do
|
51
|
-
mock(@repository).run!("git push origin --tags")
|
52
|
-
AutoTagger::Tag.new(@repository).push
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "#create" do
|
57
|
-
it "creates the right command and returns the name" do
|
58
|
-
time = Time.local(2001,1,1)
|
59
|
-
mock(Time).now.once {time}
|
60
|
-
tag_name = "ci/#{time.utc.strftime('%Y%m%d%H%M%S')}"
|
61
|
-
mock(@repository).run!("git tag #{tag_name}")
|
62
|
-
AutoTagger::Tag.new(@repository).create("ci").should == tag_name
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|