module Hoe::Git

This module is a Hoe plugin. You can set its attributes in your Rakefile Hoe spec, like this:

Hoe.plugin :git

Hoe.spec "myproj" do
  self.git_release_tag_prefix  = "REL_"
  self.git_remotes            << "myremote"
end

Tasks

git:changelog

Print the current changelog.

git:manifest

Update the manifest with Git’s file list.

git:tag

Create and push a tag.

Attributes

git_release_tag_prefix[RW]

What do you want at the front of your release tags?

default: "v"
git_remotes[RW]

Which remotes do you want to push tags, etc. to?

default: %w[ origin ]

Public Instance Methods

changelog_section(code) click to toggle source

Generate and print a changelog section based on the code.

# File lib/hoe/git.rb, line 163
def changelog_section code
  name = +{
    :major   => "major enhancement",
    :minor   => "minor enhancement",
    :bug     => "bug fix",
    :unknown => "unknown",
  }[code]

  changes = git_changes[code]
  count = changes.size
  name += "s" if count > 1
  name.sub!(/fixs/, "fixes")

  return if count < 1

  puts "* #{count} #{name}:"
  puts
  changes.sort.each do |line|
    puts "  * #{line}"
  end
  puts
end
git_tag_and_push(tag) click to toggle source

Generate a tag and push it to all remotes.

# File lib/hoe/git.rb, line 133
def git_tag_and_push tag
  msg = "Tagging #{tag}."

  flags = " -s" unless `git config --get user.signingkey`.empty?

  sh %Q(git tag#{flags} -f #{tag} -m "#{msg}")
  git_remotes.each { |remote| sh "git push -f #{remote} tag #{tag}" }
end
git_tags() click to toggle source

Return all git tags massaged down to readable versions.

# File lib/hoe/git.rb, line 145
def git_tags
  flags  = %w[--date-order
              --reverse
              --simplify-by-decoration
              --pretty=format:%H].join " "
  shas = `git log #{flags}`.lines(chomp: true)

  `git name-rev --tags #{shas.join " "}`
    .lines
    .map { |s| s[/tags\/(#{git_release_tag_prefix}.+)/, 1] }
    .compact
    .map { |s| s.sub(/\^0$/, "") } # v1.2.3^0 -> v1.2.3 (why?)
    .grep(%r{^#{git_release_tag_prefix}}) # TODO: remove?
end