lib/cookbook-release/git-utilities.rb in cookbook-release-0.3.1 vs lib/cookbook-release/git-utilities.rb in cookbook-release-0.4.1

- old
+ new

@@ -6,21 +6,24 @@ class GitUtilities attr_accessor :no_prompt def initialize(options={}) - @tag_prefix = options['tag_prefix'] || '' + @tag_prefix = options[:tag_prefix] || '' + @shellout_opts = { + cwd: options[:cwd] + } end def reset_command(new_version) "git reset --hard HEAD^ && git tag -d #{new_version}" end def clean_index? - clean_index = Mixlib::ShellOut.new("git diff --exit-code") + clean_index = Mixlib::ShellOut.new("git diff --exit-code", @shellout_opts) clean_index.run_command - clean_staged = Mixlib::ShellOut.new("git diff --exit-code --cached") + clean_staged = Mixlib::ShellOut.new("git diff --exit-code --cached", @shellout_opts) clean_staged.run_command !clean_index.error? && !clean_staged.error? end def clean_index! @@ -31,38 +34,42 @@ tag = Mixlib::ShellOut.new([ 'git describe', "--tags", "--match \"#{@tag_prefix}[0-9]\.[0-9]*\.[0-9]*\"" - ].join " ") + ].join(" "), @shellout_opts) tag.run_command tag.stdout.split('-').first.to_version end + # This string is used to split one-line git commit summary + # it just needs to be unlikely in a commit message + MAGIC_SEP = '@+-+@+-+@+-+@' + def compute_changelog(since) # TODO use whole commit message instead of title only - log_cmd = Mixlib::ShellOut.new("git log --pretty='format:%an <%ae>::%s::%h' #{since}..HEAD") + log_cmd = Mixlib::ShellOut.new("git log --pretty='format:%an <%ae>#{MAGIC_SEP}%s#{MAGIC_SEP}%h' #{since}..HEAD", @shellout_opts) log_cmd.run_command log = log_cmd.stdout log.split("\n").map do |entry| - author, subject, hash = entry.chomp.split("::") + author, subject, hash = entry.chomp.split(MAGIC_SEP) Commit.new({ author: author, subject: subject, hash: hash }) end.reject { |commit| commit[:subject] =~ /^Merge branch (.*) into/i } end def tag(version) - cmd = Mixlib::ShellOut.new("git tag #{@tag_prefix}#{version}") + cmd = Mixlib::ShellOut.new("git tag #{@tag_prefix}#{version}", @shellout_opts) cmd.run_command cmd.error! end def choose_remote - cmd = Mixlib::ShellOut.new("git remote") + cmd = Mixlib::ShellOut.new("git remote", @shellout_opts) cmd.run_command cmd.error! remotes = cmd.stdout.split("\n") if remotes.size == 1 || @no_prompt puts "Choosing remote #{remotes.first}" if @no_prompt @@ -72,10 +79,10 @@ end end def push_tag(version) remote = choose_remote - cmd = Mixlib::ShellOut.new("git push #{remote} #{@tag_prefix}#{version}") + cmd = Mixlib::ShellOut.new("git push #{remote} #{@tag_prefix}#{version}", @shellout_opts) cmd.run_command cmd.error! end end