knife-changelog 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 611393857429ed8e5091d457a902862327d2f336222629a8d1242a276c9b553f
4
- data.tar.gz: 2f1d638388d31c667ae0d6c22313e53c56c42cd0ffbb8d38706c4819f83395e6
3
+ metadata.gz: b8a6814c2c33a531b39095d40b5a29eac42e0d1d9f9771594eab6acf5585a2c1
4
+ data.tar.gz: 7e0be550e063acdb2b24fd8053815ddf5c19b9599c05147761227c28d2a946be
5
5
  SHA512:
6
- metadata.gz: e9ebf4ae12169de498bd4933bfa0a71579b83db669a4f7e4c8bfd2d4c19689c5b8a732db9355fc3165b215abbb7e433f330f6a9e3b802540babad50f52de0c28
7
- data.tar.gz: b7d3b7140e41ee4b7b5912580913471bb16be2113aaa69675ef70c33420ff5573ebf2481c8532398d90d586db204c8878160021ff825cc05aace5337eecc16e5
6
+ metadata.gz: 6aa98d7ed974e17573f0ee28898f0475dc7629d1cd1f547e96152fafbe6e0c62ba5f1e6ab14228864e909bd1de7bc9be72e516dc2260cf431e4a90567f7a91c7
7
+ data.tar.gz: 6e40a18276224d6de4cff58176e18f3a7b2467949b6328504c0704514fc518519cdb49fa2eab7bbc5b735205e284e37f69fae6889176b5f9d73faf18b362f9e5
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'knife-changelog'
8
- spec.version = '1.2.2'
8
+ spec.version = '1.2.3'
9
9
  spec.authors = ['Gregoire Seux']
10
10
  spec.email = ['kamaradclimber@gmail.com']
11
11
  spec.summary = 'Facilitate access to cookbooks changelog'
@@ -104,52 +104,31 @@ class PolicyChangelog
104
104
  def git_changelog(source_url, current, target)
105
105
  dir = Dir.mktmpdir(TMP_PREFIX)
106
106
  repo = Git.clone(source_url, dir)
107
- if tag_format(repo) == 'v'
108
- c_tag, t_tag = correct_tags("v#{current}", "v#{target}", repo)
109
- repo.log.between(c_tag, t_tag)
110
- else
111
- c_tag, t_tag = correct_tags(current, target, repo)
112
- repo.log.between(c_tag, t_tag)
113
- end.map do |commit|
107
+ repo.log.between(git_ref(current, repo), git_ref(target, repo)).map do |commit|
114
108
  "#{commit.sha[0, 7]} #{commit.message.lines.first.strip}"
115
109
  end.join("\n")
116
110
  end
117
111
 
118
- # Used to make #git_changelog method more readable
119
- #
120
- # @param current [String] current cookbook version tag
121
- # @param target [String] target cookbook version tag
122
- # @param repo [Git::Base] Git repository object
123
- # @return [true, false]
124
- def correct_tags(current, target, repo)
125
- [git_tag(current, repo), git_tag(target, repo)]
126
- end
127
-
128
- # Tries to convert a supermarket tag to a git tag
112
+ # Tries to convert a supermarket tag to a git reference
129
113
  # if there is a difference in formatting between the two.
130
114
  # This is issue is present for the 'java' cookbook.
131
115
  # https://github.com/agileorbit-cookbooks/java/issues/450
132
116
  #
133
- # @param tag [String] version tag
117
+ # @param ref [String] version reference
134
118
  # @param repo [Git::Base] Git repository object
135
119
  # @return [String]
136
- def git_tag(tag, repo)
137
- return tag if repo.checkout(tag)
138
- rescue ::Git::GitExecuteError
139
- begin
140
- rescue_tag = tag.chomp('.0') if tag[/\.0$/]
141
- return rescue_tag if repo.checkout(rescue_tag)
142
- rescue ::Git::GitExecuteError
143
- raise 'Difference between Git and Supermarket tags'
120
+ def git_ref(myref, repo)
121
+ possible_refs = ['v' + myref, myref]
122
+ possible_refs += possible_refs.map { |ref| ref.chomp('.0') } if myref[/\.0$/]
123
+ existing_ref = possible_refs.find do |ref|
124
+ begin
125
+ repo.checkout(ref)
126
+ rescue ::Git::GitExecuteError
127
+ false
128
+ end
144
129
  end
145
- end
146
-
147
- # Detects the format of a Git tag - v1.0.0 or 1.0.0
148
- #
149
- # @param repo [Git::Base] Git repository object
150
- # @return [String] Git tag versioning type
151
- def tag_format(repo)
152
- sort_by_version(repo.tags).last.name[/^v/] ? 'v' : ''
130
+ raise "Impossible to find existing references to #{possible_refs} in #{repo.remote.url}" unless existing_ref
131
+ existing_ref
153
132
  end
154
133
 
155
134
  # Sort tags by version and filter out invalid version tags
@@ -179,10 +179,10 @@ RSpec.describe PolicyChangelog do
179
179
 
180
180
  context 'when given two tags' do
181
181
  it 'generates a changelog between two tags' do
182
- allow(changelog).to receive(:tag_format).and_return('v')
183
182
  allow(git).to receive(:clone).and_return(git_repo)
183
+ allow(changelog).to receive(:git_ref).with('1.0.0', any_args).and_return('v1.0.0')
184
+ allow(changelog).to receive(:git_ref).with('1.0.1', any_args).and_return('v1.0.1')
184
185
  allow(changelog).to receive(:correct_tags)
185
- .and_return(['v1.0.0', 'v1.0.1'])
186
186
  allow(git_repo).to receive_message_chain(:log, :between)
187
187
  .with('v1.0.0', 'v1.0.1')
188
188
  .and_return([git_commit])
@@ -193,51 +193,35 @@ RSpec.describe PolicyChangelog do
193
193
  end
194
194
  end
195
195
 
196
- describe '#git_tag' do
196
+ describe '#git_ref' do
197
197
  let(:repo) { double('repo') }
198
198
 
199
199
  context 'when tag valid' do
200
200
  it 'returns correct git tag' do
201
+ allow(repo).to receive(:checkout).with('v1.0.0').and_raise(::Git::GitExecuteError)
201
202
  allow(repo).to receive(:checkout).with('1.0.0').and_return(true)
202
203
 
203
- expect(changelog.git_tag('1.0.0', repo)).to eq('1.0.0')
204
+ expect(changelog.git_ref('1.0.0', repo)).to eq('1.0.0')
204
205
  end
205
206
  end
206
207
 
207
208
  context 'when tag invalid and able to correct' do
208
209
  it 'returns correct git tag' do
210
+ allow(repo).to receive(:checkout).with(/v1.0/).and_raise(::Git::GitExecuteError)
209
211
  allow(repo).to receive(:checkout).with('1.0.0').and_raise(::Git::GitExecuteError)
210
212
  allow(repo).to receive(:checkout).with('1.0').and_return(true)
211
213
 
212
- expect(changelog.git_tag('1.0.0', repo)).to eq('1.0')
214
+ expect(changelog.git_ref('1.0.0', repo)).to eq('1.0')
213
215
  end
214
216
  end
215
217
 
216
218
  context 'when tags invalid and unable to correct' do
217
219
  it 'raises exception' do
218
- allow(repo).to receive(:checkout).with('1.0.0').and_raise(::Git::GitExecuteError)
219
- allow(repo).to receive(:checkout).with('1.0').and_raise(::Git::GitExecuteError)
220
-
221
- expect { changelog.git_tag('1.0.0', repo) }
222
- .to raise_error(RuntimeError, 'Difference between Git and Supermarket tags')
223
- end
224
- end
225
- end
226
-
227
- describe '#tag_format' do
228
- context 'when it receives a tag' do
229
- let(:repo) { Git::Base }
230
-
231
- it 'detects type for regular tag' do
232
- allow(repo).to receive_message_chain(:tags, :last, :name).and_return('1.0.0')
233
- allow(changelog).to receive(:sort_by_version).and_return(repo.tags)
234
- expect(changelog.tag_format(repo)).to eq('')
235
- end
220
+ allow(repo).to receive(:remote).and_return(double('remote', url: 'url.com'))
221
+ allow(repo).to receive(:checkout).with(any_args).and_raise(::Git::GitExecuteError)
236
222
 
237
- it 'detects type for v-tag' do
238
- allow(repo).to receive_message_chain(:tags, :last, :name).and_return('v1.0.0')
239
- allow(changelog).to receive(:sort_by_version).and_return(repo.tags)
240
- expect(changelog.tag_format(repo)).to eq('v')
223
+ expect { changelog.git_ref('1.0.0', repo) }
224
+ .to raise_error(RuntimeError, /Impossible to find existing/)
241
225
  end
242
226
  end
243
227
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-changelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregoire Seux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2018-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler