thor-scmversion 1.2.1 → 1.4.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c086a835e56747f0bda71f360fb49e0fc2189512
4
+ data.tar.gz: 2f82d25b031619974b0943a25b8c4f03c1008874
5
+ SHA512:
6
+ metadata.gz: a0ca30ca6c7aacf32f3d4da22bfc22723600cec7b96599b6a67b1424369b4d273dbf811512c4f75558d969dfb5e303835983a785c127074d10a19f5f45fd002a
7
+ data.tar.gz: f14750060d9e4291696701f2918dce167d91dd6f326abe6e4d4903391c995066687a5286214e0e02da96aa97f8756a3df41beeac7268ee065d738f6521a52d66
@@ -5,6 +5,7 @@ Feature: Bump
5
5
 
6
6
  Scenario Outline: Bumping a version
7
7
  Given I have a <scm> project of version '<starting version>'
8
+ And there is a version '9.9.9' on another branch
8
9
  When I run `bundle exec thor version:bump <bump type> <flags>` from the temp directory
9
10
  Then the version should be '<resulting version>'
10
11
  And the <scm> server version should be '<resulting version>'
@@ -31,7 +32,18 @@ Feature: Bump
31
32
  | p4 | 1.0.0 | major | 2.0.0 | |
32
33
  | p4 | 1.1.5 | minor | 1.2.0 | |
33
34
  | p4 | 1.1.5 | major | 2.0.0 | |
35
+
36
+ Scenario: Bumping a version where there is a nonversion tag
37
+ Given I have a git project of version '1.0.0-alpha.6'
38
+ And there is a tag 'notaversion'
39
+ When I run `bundle exec thor version:bump patch` from the temp directory
40
+ Then the git server version should be '1.0.1'
34
41
 
42
+ Scenario: Bumping a version where the next version that would be bumped to is already tagged in the repository
43
+ Given I have a git project of version '1.0.0'
44
+ And there is a version '1.0.1' on another branch
45
+ When I run `bundle exec thor version:bump patch` from the temp directory and expect a non-zero exit
46
+ Then the git server version should be '1.0.0'
35
47
 
36
48
  Scenario: Bumping a patch version in Git when the server has an advanced version not yet fetched
37
49
  Given I have a git project of version '1.0.0'
@@ -39,3 +51,10 @@ Feature: Bump
39
51
  When I run `bundle exec thor version:bump patch` from the temp directory
40
52
  Then the version should be '1.0.11'
41
53
  And the git server version should be '1.0.11'
54
+
55
+ Scenario: Bumping a version in a git submodule
56
+ Given I have a git project of version '1.2.3'
57
+ And .git is a file pointing to the .git folder in a parent module
58
+ When I run `bundle exec thor version:bump patch ` from the temp directory
59
+ Then the version should be '1.2.4'
60
+ And the git server version should be '1.2.4'
@@ -5,11 +5,14 @@ Feature: Guessing the level of a bump
5
5
 
6
6
  Scenario Outline: changeset tags
7
7
  Given I have a git project of version '<starting version>'
8
- And a commit message "<message 1>"
9
- And a commit message "<message 2>"
10
- And a commit message "<message 3>"
8
+ And a commit with the message "<message 1>" on the "master" branch
9
+ And a commit with the message "<message 2>" on the "master" branch
10
+ And a commit with the message "<message 3>" on the "master" branch
11
11
  When I run `bundle exec thor version:bump auto` from the temp directory
12
12
  Then the version should be '<resulting version>'
13
+ # TODO: Figure out how to set up remote branch tracking so this
14
+ # does not have to be called explicitly
15
+ And I run `git push origin master --tags` from the temp directory
13
16
  And the <scm> server version should be '<resulting version>'
14
17
 
15
18
  Examples:
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  Given /^I have a git project of version '(.*)'$/ do |version|
2
4
  Dir.chdir(origin_dir) do
3
5
  `git init`
@@ -16,15 +18,18 @@ Given /^I have a git project of version '(.*)'$/ do |version|
16
18
  $?.success?.should be_true
17
19
  `git tag -a -m "Version #{version}" #{version}`
18
20
  $?.success?.should be_true
19
- `git push origin master -u`
21
+ `git push origin master -u --tags`
20
22
  $?.success?.should be_true
21
23
  setup_directory
22
24
  end
23
25
  end
24
26
 
25
- Given /^a commit message "(.*?)"$/ do |msg|
27
+ Given /^a commit with the message "(.*?)" on the "(.*?)" branch$/ do |msg, branch|
26
28
  Dir.chdir(project_dir) do
27
- `git commit --allow-empty -m "#{msg}"`
29
+ `echo #{SecureRandom.uuid} > Randomfile`
30
+ `git add Randomfile`
31
+ `git commit -m "#{msg}"`
32
+ `git push origin #{branch}`
28
33
  end
29
34
  end
30
35
 
@@ -53,9 +58,13 @@ Given /^the origin version is '(.+)'$/ do |version|
53
58
  }
54
59
  end
55
60
 
56
- When /^I run `(.*)` from the temp directory$/ do |run|
61
+ When /^I run `(.*)` from the temp directory( and expect a non-zero exit)?$/ do |command, nonzero_exit|
57
62
  Dir.chdir(project_dir) {
58
- `#{run}`
63
+ out = `#{command}`
64
+ unless $?.success? or nonzero_exit
65
+ puts out
66
+ fail
67
+ end
59
68
  }
60
69
  end
61
70
 
@@ -97,3 +106,31 @@ Then /^the p4 server version should be '(.*)'$/ do |version|
97
106
  end
98
107
  end
99
108
 
109
+ Then(/^there is a version '(.+)' on another branch$/) do |version|
110
+ Dir.chdir(project_dir) do
111
+ `git checkout -b another_branch`
112
+ $?.success?.should be_true
113
+ `echo anotherbranch > README`
114
+ $?.success?.should be_true
115
+ `git commit -am 'commit'`
116
+ $?.success?.should be_true
117
+ `git tag #{version}`
118
+ $?.success?.should be_true
119
+ `git checkout master`
120
+ $?.success?.should be_true
121
+ end
122
+ end
123
+
124
+ Given(/^there is a tag '(.*)'$/) do |version|
125
+ Dir.chdir(project_dir) do
126
+ `git tag #{version}`
127
+ end
128
+ end
129
+
130
+ Given(/^.git is a file pointing to the .git folder in a parent module$/) do
131
+ project_git_path = File.join(project_dir, '.git')
132
+ git_folder_path = File.join(parent_module_dir, '.git')
133
+ File.directory?( project_git_path ).should be_true
134
+ File.rename project_git_path, git_folder_path
135
+ `echo "gitdir: #{ git_folder_path }" > "#{ project_git_path }"`
136
+ end
@@ -19,6 +19,10 @@ def origin_dir
19
19
  @origindir ||= Dir.mktmpdir
20
20
  end
21
21
 
22
+ def parent_module_dir
23
+ @parentmoduledir ||= Dir.mktmpdir
24
+ end
25
+
22
26
  def fixtures_dir
23
27
  File.join(File.dirname(__FILE__), "..", "fixtures")
24
28
  end
@@ -24,8 +24,12 @@ module ThorSCMVersion
24
24
  say "Tagged: #{current_version}", :green
25
25
  rescue => e
26
26
  say "Tagging #{current_version} failed due to error", :red
27
- say e, :red
28
- exit 1
27
+ say e.to_s, :red
28
+ if e.respond_to? :status_code
29
+ exit e.status_code
30
+ else
31
+ exit 1
32
+ end
29
33
  end
30
34
  end
31
35
 
@@ -23,4 +23,16 @@ module ThorSCMVersion
23
23
  class InvalidPrereleaseFormatError < TagFormatError
24
24
  def to_s; super + " Format must be: #{Prerelease::FORMAT.inspect}."; end
25
25
  end
26
+
27
+ class GitError < SCMVersionError; end
28
+ class GitTagDuplicateError < GitError
29
+ status_code(100)
30
+ def initialize(tag)
31
+ @tag = tag
32
+ end
33
+
34
+ def to_s
35
+ msg = "Tried to tag #{@tag}, but it already exists! Either build from the latest tag at this bump level or choose a lower order bump level."
36
+ end
37
+ end
26
38
  end
@@ -6,18 +6,27 @@ module ThorSCMVersion
6
6
  def all_from_path(path)
7
7
  Dir.chdir(path) do
8
8
  tags = Open3.popen3("git tag") { |stdin, stdout, stderr| stdout.read }.split(/\n/)
9
- version_tags = tags.select { |tag| tag.match(ScmVersion::VERSION_FORMAT) }
10
- version_tags.collect { |tag| from_tag(tag) }.sort.reverse
9
+ tags.select { |tag| tag.match(ScmVersion::VERSION_FORMAT) }
10
+ .collect { |tag| from_tag(tag) }
11
+ .select { |tag| contained_in_current_branch?(tag) }.sort.reverse
11
12
  end
12
13
  end
13
14
 
15
+ def contained_in_current_branch?(tag)
16
+ ShellUtils.sh("git branch --contains #{tag}") =~ /\*/
17
+ end
18
+
14
19
  def retrieve_tags
15
20
  ShellUtils.sh("git fetch --all")
16
21
  end
17
22
  end
18
23
 
19
24
  def tag
20
- ShellUtils.sh "git tag -a -m \"Version #{self}\" #{self}"
25
+ begin
26
+ ShellUtils.sh "git tag -a -m \"Version #{self}\" #{self}"
27
+ rescue => e
28
+ raise GitTagDuplicateError.new(self.to_s)
29
+ end
21
30
  ShellUtils.sh "git push --tags || true"
22
31
  end
23
32
 
@@ -5,7 +5,7 @@ module ThorSCMVersion
5
5
  #
6
6
  # @return [#kind_of? ScmVersion]
7
7
  def versioner
8
- if(File.directory?(".git"))
8
+ if(File.exist? (".git"))
9
9
  return GitVersion
10
10
  else
11
11
  return P4Version
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module ThorSCMVersion
4
+ describe GitVersion do
5
+ it "should detect if a commit is contained on a given branch" do
6
+ ShellUtils.stub(:sh).and_return(<<OUT)
7
+ * constrain_bump_to_branch
8
+ master
9
+ OUT
10
+ expect(GitVersion.contained_in_current_branch?('0.0.1')).to be_true
11
+ end
12
+ end
13
+ end
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
23
23
  gem.add_development_dependency 'vcr'
24
24
  gem.add_development_dependency 'aruba'
25
25
  gem.add_development_dependency 'rspec'
26
+ gem.add_development_dependency 'debugger'
26
27
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thor-scmversion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
5
- prerelease:
4
+ version: 1.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Ivey
@@ -11,134 +10,132 @@ authors:
11
10
  autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2013-04-09 00:00:00.000000000 Z
13
+ date: 2013-11-08 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: thor
18
17
  requirement: !ruby/object:Gem::Requirement
19
- none: false
20
18
  requirements:
21
- - - ! '>='
19
+ - - '>='
22
20
  - !ruby/object:Gem::Version
23
21
  version: '0'
24
22
  type: :runtime
25
23
  prerelease: false
26
24
  version_requirements: !ruby/object:Gem::Requirement
27
- none: false
28
25
  requirements:
29
- - - ! '>='
26
+ - - '>='
30
27
  - !ruby/object:Gem::Version
31
28
  version: '0'
32
29
  - !ruby/object:Gem::Dependency
33
30
  name: webmock
34
31
  requirement: !ruby/object:Gem::Requirement
35
- none: false
36
32
  requirements:
37
- - - ! '>='
33
+ - - '>='
38
34
  - !ruby/object:Gem::Version
39
35
  version: '0'
40
36
  type: :development
41
37
  prerelease: false
42
38
  version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
39
  requirements:
45
- - - ! '>='
40
+ - - '>='
46
41
  - !ruby/object:Gem::Version
47
42
  version: '0'
48
43
  - !ruby/object:Gem::Dependency
49
44
  name: geminabox
50
45
  requirement: !ruby/object:Gem::Requirement
51
- none: false
52
46
  requirements:
53
- - - ! '>='
47
+ - - '>='
54
48
  - !ruby/object:Gem::Version
55
49
  version: '0'
56
50
  type: :development
57
51
  prerelease: false
58
52
  version_requirements: !ruby/object:Gem::Requirement
59
- none: false
60
53
  requirements:
61
- - - ! '>='
54
+ - - '>='
62
55
  - !ruby/object:Gem::Version
63
56
  version: '0'
64
57
  - !ruby/object:Gem::Dependency
65
58
  name: spork
66
59
  requirement: !ruby/object:Gem::Requirement
67
- none: false
68
60
  requirements:
69
- - - ! '>='
61
+ - - '>='
70
62
  - !ruby/object:Gem::Version
71
63
  version: '0'
72
64
  type: :development
73
65
  prerelease: false
74
66
  version_requirements: !ruby/object:Gem::Requirement
75
- none: false
76
67
  requirements:
77
- - - ! '>='
68
+ - - '>='
78
69
  - !ruby/object:Gem::Version
79
70
  version: '0'
80
71
  - !ruby/object:Gem::Dependency
81
72
  name: simplecov
82
73
  requirement: !ruby/object:Gem::Requirement
83
- none: false
84
74
  requirements:
85
- - - ! '>='
75
+ - - '>='
86
76
  - !ruby/object:Gem::Version
87
77
  version: '0'
88
78
  type: :development
89
79
  prerelease: false
90
80
  version_requirements: !ruby/object:Gem::Requirement
91
- none: false
92
81
  requirements:
93
- - - ! '>='
82
+ - - '>='
94
83
  - !ruby/object:Gem::Version
95
84
  version: '0'
96
85
  - !ruby/object:Gem::Dependency
97
86
  name: vcr
98
87
  requirement: !ruby/object:Gem::Requirement
99
- none: false
100
88
  requirements:
101
- - - ! '>='
89
+ - - '>='
102
90
  - !ruby/object:Gem::Version
103
91
  version: '0'
104
92
  type: :development
105
93
  prerelease: false
106
94
  version_requirements: !ruby/object:Gem::Requirement
107
- none: false
108
95
  requirements:
109
- - - ! '>='
96
+ - - '>='
110
97
  - !ruby/object:Gem::Version
111
98
  version: '0'
112
99
  - !ruby/object:Gem::Dependency
113
100
  name: aruba
114
101
  requirement: !ruby/object:Gem::Requirement
115
- none: false
116
102
  requirements:
117
- - - ! '>='
103
+ - - '>='
118
104
  - !ruby/object:Gem::Version
119
105
  version: '0'
120
106
  type: :development
121
107
  prerelease: false
122
108
  version_requirements: !ruby/object:Gem::Requirement
123
- none: false
124
109
  requirements:
125
- - - ! '>='
110
+ - - '>='
126
111
  - !ruby/object:Gem::Version
127
112
  version: '0'
128
113
  - !ruby/object:Gem::Dependency
129
114
  name: rspec
130
115
  requirement: !ruby/object:Gem::Requirement
131
- none: false
132
116
  requirements:
133
- - - ! '>='
117
+ - - '>='
134
118
  - !ruby/object:Gem::Version
135
119
  version: '0'
136
120
  type: :development
137
121
  prerelease: false
138
122
  version_requirements: !ruby/object:Gem::Requirement
139
- none: false
140
123
  requirements:
141
- - - ! '>='
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: debugger
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - '>='
142
139
  - !ruby/object:Gem::Version
143
140
  version: '0'
144
141
  description: Thor tasks to manage a VERSION file based on SCM tags
@@ -172,33 +169,33 @@ files:
172
169
  - lib/thor-scmversion/shell_utils.rb
173
170
  - lib/thor-scmversion/version.rb
174
171
  - lib/thor/scmversion.rb
172
+ - spec/lib/thor-scmversion/git_version_spec.rb
175
173
  - spec/lib/thor-scmversion/prerelease_spec.rb
176
174
  - spec/lib/thor-scmversion/scm_version_spec.rb
177
175
  - spec/spec_helper.rb
178
176
  - thor-scmversion.gemspec
179
177
  homepage: ''
180
178
  licenses: []
179
+ metadata: {}
181
180
  post_install_message:
182
181
  rdoc_options: []
183
182
  require_paths:
184
183
  - lib
185
184
  required_ruby_version: !ruby/object:Gem::Requirement
186
- none: false
187
185
  requirements:
188
- - - ! '>='
186
+ - - '>='
189
187
  - !ruby/object:Gem::Version
190
188
  version: '0'
191
189
  required_rubygems_version: !ruby/object:Gem::Requirement
192
- none: false
193
190
  requirements:
194
- - - ! '>='
191
+ - - '>='
195
192
  - !ruby/object:Gem::Version
196
193
  version: '0'
197
194
  requirements: []
198
195
  rubyforge_project:
199
- rubygems_version: 1.8.23
196
+ rubygems_version: 2.0.3
200
197
  signing_key:
201
- specification_version: 3
198
+ specification_version: 4
202
199
  summary: A small set of Thor tasks you can include in your build scripts to manage
203
200
  a VERSION file based on SCM tags. This allows you to keep VERSION out of cource
204
201
  control, allowing your continuous integration system to version each build.
@@ -208,6 +205,7 @@ test_files:
208
205
  - features/fixtures/Thorfile
209
206
  - features/step_definitions/bump_steps.rb
210
207
  - features/support/env.rb
208
+ - spec/lib/thor-scmversion/git_version_spec.rb
211
209
  - spec/lib/thor-scmversion/prerelease_spec.rb
212
210
  - spec/lib/thor-scmversion/scm_version_spec.rb
213
211
  - spec/spec_helper.rb