grit/benchmarks.rb

130 строки
2.8 KiB
Ruby

require 'fileutils'
require 'benchmark'
require 'rubygems'
require 'ruby-prof'
require 'memcache'
require 'pp'
#require 'grit'
require 'lib/grit'
def main
@wbare = File.expand_path(File.join('test', 'dot_git'))
in_temp_dir do
#result = RubyProf.profile do
git = Grit::Repo.new('.')
puts Grit::VERSION
Grit::GitRuby.use_commit_db = true
#Grit::GitRuby.cache_client = MemCache.new 'localhost:11211', :namespace => 'grit'
#Grit.debug = true
#pp Grit::GitRuby.cache_client.stats
commit1 = '5e3ee1198672257164ce3fe31dea3e40848e68d5'
commit2 = 'ca8a30f5a7f0f163bbe3b6f0abf18a6c83b0687a'
Benchmark.bm(8) do |x|
run_code(x, 'packobj') do
@commit = git.commit('5e3ee1198672257164ce3fe31dea3e40848e68d5')
@tree = git.tree('cd7422af5a2e0fff3e94d6fb1a8fff03b2841881')
@blob = git.blob('4232d073306f01cf0b895864e5a5cfad7dd76fce')
@commit.parents[0].parents[0].parents[0]
end
run_code(x, 'commits 1') do
git.commits.size
end
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
log.size
log.first
git.commits('testing').map { |c| c.message }
end
run_code(x, 'big revlist') do
c = git.commits('master', 200)
end
run_code(x, 'log') do
log = git.log('master')
log.size
log.size
log.first
end
run_code(x, 'diff') do
c = git.diff(commit1, commit2)
end
run_code(x, 'commit-diff') do
c = git.commit_diff(commit1)
end
run_code(x, 'heads') do
c = git.heads.collect { |b| b.commit.id }
end
# run_code(x, 'config', 100) do
# c = git.config['user.name']
# c = git.config['user.email']
# end
#run_code(x, 'commit count') do
# c = git.commit_count('testing')
#end
end
#end
#printer = RubyProf::FlatPrinter.new(result)
#printer.print(STDOUT, 0)
end
end
def run_code(x, name, times = 30)
x.report(name.ljust(12)) do
for i in 1..times do
yield i
end
end
#end
# Print a graph profile to text
end
def new_file(name, contents)
File.open(name, 'w') do |f|
f.puts contents
end
end
def in_temp_dir(remove_after = true)
filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
tmp_path = File.join("/tmp/", filename)
FileUtils.mkdir(tmp_path)
Dir.chdir tmp_path do
FileUtils.cp_r(@wbare, File.join(tmp_path, '.git'))
yield tmp_path
end
puts tmp_path
#FileUtils.rm_r(tmp_path) if remove_after
end
main()
##pp Grit::GitRuby.cache_client.stats