require 'rubygems' require 'bundler/setup'

require 'rubygems/package_task'

require 'rake/testtask' require 'rake/clean' require 'yard'

$:.unshift File.join(File.dirname(__FILE__), 'lib') require 'rgl/base' # require base module to get RGL_VERSION

SOURCES = FileList['lib /*.rb']

# The default task is run if rake is given no explicit arguments. desc “Default Task” task :default => :test

# Define a test task.

Rake::TestTask.new do |t|

t.libs << 'test'
t.pattern = 'test/*_test.rb'
t.verbose = true

end

# Git tagging

desc “Commit all changes as a new version commit. Tag the commit with v<version> tag” task :tag do

puts "Committing and tagging version #{RGL_VERSION}"
`git commit -am 'Version #{RGL_VERSION}'`
`git tag 'v#{RGL_VERSION}'`

end

YARD::Rake::YardocTask.new

# Tasks for building and installing RGL gem.

Bundler::GemHelper.install_tasks

# TAGS —————————————————————

file 'tags' => SOURCES do

print "Running ctags..."
sh %{ctags #{SOURCES.join(' ')}}             # vi tags
puts "done."

end

file 'TAGS' => SOURCES do

sh %{etags #{SOURCES.join(' ')}}          # emacs TAGS

end

# Misc tasks =========================================================

def count_lines(filename)

lines = 0
codelines = 0
open(filename) { |f|
  f.each do |line|
    lines += 1
    next if line =~ /^\s*$/
    next if line =~ /^\s*#/
    codelines += 1
  end
}
[lines, codelines]

end

def show_line(msg, lines, loc)

printf "%6s %6s   %s\n", lines.to_s, loc.to_s, msg

end

desc “Count lines in the main files” task :lines do

total_lines = 0
total_code = 0
show_line("File Name", "LINES", "LOC")
SOURCES.each do |fn|
  lines, codelines = count_lines(fn)
  show_line(fn, lines, codelines)
  total_lines += lines
  total_code  += codelines
end
show_line("TOTAL", total_lines, total_code)

end

# simple rake task to output a changelog between two commits, tags … # output is formatted simply, commits are grouped under each author name # desc “generate changelog with nice clean output” task :changelog, :since_c, :until_c do |t,args|

since_c = args[:since_c] || `git tag | tail -1`.chomp
until_c = args[:until_c]
cmd=`git log --pretty='format:%ci::%an <%ae>::%s::%H' #{since_c}..#{until_c}`

entries = Hash.new
changelog_content = String.new

cmd.split("\n").each do |entry|
  _, author, subject, hash = entry.chomp.split("::")
  entries[author] = Array.new unless entries[author]
  entries[author] << "#{subject} (#{hash[0..5]})" unless subject =~ /Merge/
end

# generate clean output
entries.keys.each do |author|
  changelog_content += author + "\n"
  entries[author].reverse.each { |entry| changelog_content += " * #{entry}\n" }
end

puts changelog_content

end