# -*- ruby -*- 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 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| date, author, subject, hash = entry.chomp.split("::") entries[author] = Array.new unless entries[author] day = date.split(" ").first 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