cookbook-release 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YTI3MDYzODBjYjM4MzY0YWZkODczMmI5OTEyZDZjMTRkYTgyYjZhYw==
4
+ NTI4MmYxOTQ2MTZkMTBjYzZkMDlhMGNiNzk2NGFlZmU4Y2NmMWY2NQ==
5
5
  data.tar.gz: !binary |-
6
- ODZkZjMzMzE5MzM0ZTliYzAyODM4YjUyNDlkZTUzMGMxM2Y2MWY0ZA==
6
+ MTRkNTc4MmIyMWRjN2VmM2U2M2I3ZGJlNWVhZGI0MWYwNjZjYjhmMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MTE4YTk0YTY0MjQ3M2IwNTU5NzkxYjM3NGZmZjBjMjg5NmU1ZTgyNGNiYjA3
10
- YzIyYzZjNWU0NjAzOWYzZGIwYjBmNTNhMDg0ZjY0MGQyODhlNGI5M2E2NjE4
11
- MmU3MGRiNjNlYmVmYzJkMGQ2NzA1NTAxMzI5Yzk2NjVjNTc5OTY=
9
+ YzVkNzZmZjNmYjdjNDg2Y2M1ZjFmNDU4ODJlMTliM2ZkOGE4MTIxMTM1NzNm
10
+ MGJmZTU4NmFiMTRiNWJjNjhkOWFjNTI0MDFjMmMyZGNmM2VlNjU0MTFlMDg0
11
+ ZDEyNDBhY2JkMmIyNGRkZDU4Yjk2NzJmMjZhMjhmMzQxOTRkMDI=
12
12
  data.tar.gz: !binary |-
13
- Mjk4YzFiNzI5ZjkwYmNiNDJhY2ZhZWU2Y2FkNGRhOWViOGNhYmMwMjk2NzA1
14
- ZDcxNWU3ZjYzZTY1NDZiYzhjYWEwYjczNzQ2YjZiYTI1ZWQwZDRmYjcxY2Yw
15
- NjhkZGQ2NzZmYzU0MzlhZDMxYzE2NGY3ZDJhNmRlNjhhNjVhZTQ=
13
+ YzhiODZlYzc4OTllZmNhYzk3NTAyYWZkMzg3YzJiYzlkNWRjMjk2ZTExMzk5
14
+ YWUxMDA3OTJmZmZmMzAyNjhmMzE5MzUzNjI4OWM5NmI2MTFiMGRiNDYwNDk3
15
+ NGFkMDRhNWZkODUxMzY2Y2Q2OWFjNzY4MmY5ZDIxNGE4ZThlMzg=
@@ -6,7 +6,7 @@ require 'English'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'cookbook-release'
9
- spec.version = '1.1.4'
9
+ spec.version = '1.1.5'
10
10
  spec.authors = ['Grégoire Seux']
11
11
  spec.email = 'g.seux@criteo.com'
12
12
  spec.summary = 'Provide primitives (and rake tasks) to release a cookbook'
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'highline'
24
24
  spec.add_dependency 'mixlib-shellout'
25
25
  spec.add_dependency 'chef'
26
+ spec.add_dependency 'git'
26
27
 
27
28
 
28
29
  spec.add_development_dependency 'rspec'
@@ -2,6 +2,7 @@ require 'semantic'
2
2
  require 'semantic/core_ext'
3
3
  require 'mixlib/shellout'
4
4
  require 'highline/import'
5
+ require 'git'
5
6
 
6
7
  module CookbookRelease
7
8
  class GitUtilities
@@ -10,13 +11,15 @@ module CookbookRelease
10
11
 
11
12
  def initialize(options={})
12
13
  @tag_prefix = options[:tag_prefix] || ''
14
+ cwd = options[:cwd] || Dir.pwd
13
15
  @shellout_opts = {
14
- cwd: options[:cwd]
16
+ cwd: cwd
15
17
  }
18
+ @g = Git.open(cwd)
16
19
  end
17
20
 
18
21
  def self.git?(dir)
19
- File.directory?(::File.join(dir, '.git'))
22
+ @g.index.readable?
20
23
  end
21
24
 
22
25
  def reset_command(new_version)
@@ -59,32 +62,20 @@ module CookbookRelease
59
62
  last.to_version
60
63
  end
61
64
 
62
- # These string are used to split git commit summary
63
- # it just needs to be unlikely in a commit message
64
- MAGIC_SEP = '@+-+@+-+@+-+@'
65
- MAGIC_COMMIT_SEP = '@===@===@===@'
66
-
67
65
  def compute_changelog(since)
68
- log_cmd = Mixlib::ShellOut.new("git log --pretty=\"tformat:%an <%ae>#{MAGIC_SEP}%s#{MAGIC_SEP}%h#{MAGIC_SEP}%b#{MAGIC_COMMIT_SEP}\" #{since}..HEAD", @shellout_opts)
69
- log_cmd.run_command
70
- log_cmd.error!
71
- log = log_cmd.stdout
72
- log.split(MAGIC_COMMIT_SEP).map do |entry|
73
- next if entry.chomp == ''
74
- author, subject, hash, body = entry.chomp.split(MAGIC_SEP).map(&:chomp)
75
- Commit.new({
76
- author: author,
77
- subject: subject,
78
- hash: hash,
79
- body: body
80
- })
81
- end.compact.reject { |commit| commit[:subject] =~ /^Merge branch (.*) into/i }
66
+ commits = @g.log.between(since, 'HEAD').map do |commit|
67
+ message = commit.message.lines.map(&:chomp).compact.delete_if(&:empty?)
68
+ Commit.new(
69
+ author: commit.author.name,
70
+ subject: message.delete_at(0),
71
+ hash: commit.sha,
72
+ body: message.empty? ? nil : message.join('\n')
73
+ )
74
+ end.reject { |commit| commit[:subject] =~ /^Merge branch (.*) into/i }
82
75
  end
83
76
 
84
77
  def tag(version)
85
- cmd = Mixlib::ShellOut.new("git tag #{@tag_prefix}#{version}", @shellout_opts)
86
- cmd.run_command
87
- cmd.error!
78
+ @g.add_tag("#{@tag_prefix}#{version}")
88
79
  end
89
80
 
90
81
  def choose_remote
data/spec/git_spec.rb CHANGED
@@ -106,5 +106,27 @@ describe CookbookRelease::GitUtilities do
106
106
  expect(changelog.size).to eq(3)
107
107
  expect(changelog.map {|c| c[:subject]}).to contain_exactly('A commit', 'Another commit', 'A third one')
108
108
  end
109
+
110
+ it 'parse correctly commits' do
111
+ cmds = <<-EOH
112
+ touch toto
113
+ git add toto
114
+ git commit -m'none'
115
+ git tag 1.0.0
116
+ git commit --allow-empty -m "subject" -m "body"
117
+ git commit --allow-empty -m "without body"
118
+ EOH
119
+ cmds.split("\n").each do |cmd|
120
+ cmd = Mixlib::ShellOut.new(cmd)
121
+ cmd.run_command
122
+ cmd.error!
123
+ end
124
+
125
+ changelog = git.compute_changelog('1.0.0')
126
+ expect(changelog.size).to eq(2)
127
+ expect(changelog[1][:subject]).to eq('subject')
128
+ expect(changelog[1][:body]).to eq('body')
129
+ expect(changelog[0][:body]).to be_nil
130
+ end
109
131
  end
110
132
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cookbook-release
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grégoire Seux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-17 00:00:00.000000000 Z
11
+ date: 2016-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semantic
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: git
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement