cookbook-release 1.1.4 → 1.1.5

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.
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