Reworking Rake tasks

This commit is contained in:
Arfon Smith
2014-08-06 17:57:49 +01:00
parent 149f8967ad
commit 417bf7e1c9

View File

@@ -23,58 +23,57 @@ task :build_gem do
File.delete("lib/linguist/languages.json") File.delete("lib/linguist/languages.json")
end end
# Want to do: rake benchmark:compare refs=20154eb04...6ed0a05b4
# If output for 20154eb04 or 6ed0a05b4 doesn't exist then should throw error
# Classification outputs for each commit need to be generated before the comparison can be done
# With something like: rake benchmark:generate ref=20154eb04
namespace :benchmark do namespace :benchmark do
require 'git' require 'git'
require 'linguist/language' benchmark_path = "benchmark/results"
require './lib/linguist/diff'
git = Git.open('.') git = Git.open('.')
desc "Testin'" desc "Compare outputs"
task :run do task :compare do
reference, compare = ENV['compare'].split('...') reference, compare = ENV['refs'].split('...')
puts "Comparing #{reference}...#{compare}" puts "Comparing #{reference}...#{compare}"
# Abort if there are uncommitted changes
abort("Uncommitted changes -- aborting") if git.status.changed.any?
[reference, compare].each do |ref|
abort("No output file for #{ref}, run 'rake benchmark:generate ref=#{ref}'") unless File.exist?("#{benchmark_path}/#{ref}.json")
end
end
desc "Generate classification summary for given ref"
task :generate do
ref = ENV['ref']
abort("Must specify a commit ref, e.g. 'rake benchmark:generate ref=08819f82'") unless ref
abort("Unstaged changes - aborting") if git.status.changed.any? abort("Unstaged changes - aborting") if git.status.changed.any?
# Get the current branch # Get the current branch
# Would like to get this from the Git gem # Would like to get this from the Git gem
current_branch = `git rev-parse --abbrev-ref HEAD`.strip current_branch = `git rev-parse --abbrev-ref HEAD`.strip
# Create tmp branch for reference commit puts "Checking out #{ref}"
puts "Creating branch tmp_#{reference}" git.checkout(ref)
git.branch("tmp_#{reference}").checkout
git.reset_hard(reference)
# RUN BENCHMARK # RUN BENCHMARK
# Go through benchmark/samples/LANG dirs # Go through benchmark/samples/LANG dirs
# For each Language # For each Language
Rake::Task["benchmark:index"].execute(:commit => reference) Rake::Task["benchmark:index"].execute(:commit => ref)
# Create tmp branch for compare commit # Checkout original branch
puts "" git.checkout(current_branch)
puts "Creating temporary branch tmp_#{compare}"
git.branch("tmp_#{compare}").checkout
git.reset_hard(compare)
# RUN BENCHMARK AGAIN
# `rake benchmark:index`
Rake::Task["benchmark:index"].execute(:commit => compare)
git.branch(current_branch).checkout
# CLEAN UP
git.branch("tmp_#{reference}").delete
git.branch("tmp_#{compare}").delete
# COMPARE AND PRINT RESULTS
Rake::Task["benchmark:results"].execute
end end
desc "Build benchmark index" desc "Build benchmark index"
task :index, [:commit] do |t, args| task :index, [:commit] do |t, args|
require 'linguist/language'
require 'linguist/language'
results = Hash.new results = Hash.new
languages = Dir.glob('benchmark/samples/*') languages = Dir.glob('benchmark/samples/*')
@@ -99,17 +98,18 @@ namespace :benchmark do
end end
end end
File.open("benchmark/results/#{args[:commit]}_output.json", "w") {|f| f.write(results.to_json) } File.open("benchmark/results/#{args[:commit]}.json", "w") {|f| f.write(results.to_json) }
end end
desc "Compare results" desc "Compare results"
task :results do task :results do
# Deep diffing
require './lib/linguist/diff'
# `diff -u file1 file2` reference, compare = ENV['refs'].split('...')
reference, compare = ENV['compare'].split('...')
reference_classifications_file = "benchmark/results/#{reference}_output.json" reference_classifications_file = "benchmark/results/#{reference}.json"
compare_classifications_file = "benchmark/results/#{compare}_output.json" compare_classifications_file = "benchmark/results/#{compare}.json"
# DO COMPARISON... # DO COMPARISON...
abort("No result files to compare") unless (File.exist?(reference_classifications_file) && File.exist?(compare_classifications_file)) abort("No result files to compare") unless (File.exist?(reference_classifications_file) && File.exist?(compare_classifications_file))