Sha256: 8eecaa6c088edb685254dfaab98cc24da9cd785df2f0a8c21eb7efde4d40f1f8
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
require 'time' desc 'update changelog' task :CHANGELOG do # Get list of release tags from Git repository releases = `git tag`.split("\n").map { |r| r.chomp } # Now we get the commit entries for each release sections = [] prevRelease = nil releases.each do |release| # This buffer holds the final text for the release section. It will # contain the commit messages in RDoc format. text = '' # We only support release tags in the form X.X.X version = /\d\.\d\.\d/.match(release) # Construct a Git range. interval = prevRelease ? "#{prevRelease}..#{release}" : release prevRelease = release # Get the date of the release date = Time.parse(/Date: (.*)/.match(`git show #{release}`)[1]).utc date = date.strftime("%Y-%m-%d") # We use RDOC markup syntax to generate a title text += "= Release #{version} (#{date})\n\n" # Use -z option for git-log to get 0 bytes as separators. `git log -z #{interval}`.split("\0").each do |commit| # We ignore merges. next if commit =~ /^Merge: \d*/ ref, author, time, _, message = commit.split("\n", 5) ref = ref[/commit ([0-9a-f]+)/, 1] author = author[/Author: (.*)/, 1].strip time = Time.parse(time[/Date: (.*)/, 1]).utc # Eleminate git-svn-id: lines message.gsub!(/git-svn-id: .*\n/, '') # Eliminate Signed-off-by: lines message.gsub!(/Signed-off-by: .*\n/, '') message.strip! text += " * #{message}\n" end sections << text end File.open('CHANGELOG', 'w+') do |changelog| # List releases from last to first. sections.reverse.each do |section| changelog.puts section + "\n" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
taskjuggler-0.0.10 | tasks/changelog.rake |
taskjuggler-0.0.9 | tasks/changelog.rake |