blob: f07de5068c997a03e84bec3160da4ac01f61f09d [file] [log] [blame]
require 'whimsy/asf/config'
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
task :spec => 'test:setup'
task :test => :spec
task :server => [:bundle, :listen] do
ENV['RACK_ENV']='development'
at_exit {sleep 0.5}
sh 'bundle exec passenger start'
end
namespace :server do
task :test => :work do
ENV['RACK_ENV']='test'
ENV['USER']='test'
require 'wunderbar/listen'
end
end
task "touch" do
sh 'touch', File.expand_path('../tmp/restart.txt', __FILE__)
end
file 'test/work' do
mkdir_p 'test/work'
end
file 'test/work/repository' => 'test/work' do
unless File.exist? 'test/work/repository/format'
system 'svnadmin create test/work/repository'
end
end
file 'test/work/board' => 'test/work/repository' do
Dir.chdir('test/work') do
rm_rf 'board' if File.exist? 'board'
system "svn co file:///#{Dir.pwd}/repository board"
cp Dir['../data/*.txt'], 'board'
Dir.chdir('board') {system 'svn add *.txt; svn commit -m "initial commit"'}
end
end
testfiles = %w(board_minutes_2015_01_21 board_minutes_2015_02_18 test)
testfiles.each do |testfile|
file "test/work/data/#{testfile}.yml" do
mkdir_p 'test/work/data' unless File.exist? 'test/work/data'
cp "test/#{testfile}.yml", "test/work/data/#{testfile}.yml"
end
end
task :reset do
testfiles.each do |testfile|
if File.exist? "test/work/data/#{testfile}.yml"
if
IO.read("test/#{testfile}.yml") !=
IO.read("test/work/data/#{testfile}.yml")
then
rm "test/work/data/#{testfile}.yml"
end
end
end
if
Dir['test/work/board/*'].any? do |file|
base = "test/data/#{File.basename file}"
not File.exist?(base) or IO.read(base) != IO.read(file)
end
then
rm_rf 'test/work/board'
end
unless Dir.exist? 'test/work/board'
rm_rf 'test/work/repository'
end
end
task :work => ['test/work/board',
*testfiles.map {|testfile| "test/work/data/#{testfile}.yml"}]
namespace :test do
task :setup => [:reset, :work]
task :server => 'server:test'
task :stress => :setup do
ruby 'test/stresstest.rb'
end
end
task :clobber do
rm_rf 'test/work'
end
task :update do
# update agenda application
Dir.chdir File.dirname(__FILE__) do
puts "#{File.dirname(File.realpath(__FILE__))}:"
system 'git pull'
end
# update libs
if File.exist? "#{ENV['HOME']}/.whimsy"
libs = YAML.load_file("#{ENV['HOME']}/.whimsy")[:lib] || []
libs.each do |lib|
puts "\n#{lib}:"
if not File.exist? lib
puts 'not found'
next
end
# determine repository type
repository = :none
parent = File.realpath(lib)
while repository == :none and parent != '/'
if File.exist? File.join(parent, '.svn')
repository = :svn
elsif File.exist? File.join(parent, '.git')
repository = :git
else
parent = File.dirname(parent)
end
end
# update repository
Dir.chdir lib do
system 'svn up' if repository == :svn
system 'git pull' if repository == :git
end
end
end
# update gems
puts "\nbundle update:"
system 'bundle update'
end
namespace :svn do
task :update do
ASF::Config.get(:svn).each do |svn|
if Dir.exist? svn
puts "\n#{svn}:"
Dir.chdir(svn) {system 'svn up'}
end
end
end
end
task :bundle => 'Gemfile.lock' do
require 'bundler'
Bundler.require(:default, :development)
end
# restart server when files update
task :listen => :bundle do
dirs = [
File.expand_path('..', File.realpath(__FILE__)),
File.expand_path('../../../../lib', File.realpath(__FILE__))
]
listener = Listen.to(*dirs) do |modified, added, removed|
puts "detected update: #{(modified + added + removed).join(', ')}"
FileUtils.touch "#{dirs.first}/tmp/restart.txt"
end
listener.ignore /~$/
listener.ignore /^\..*\.sw\w$/
listener.ignore /passenger.\d+\.(log|pid(\.lock)?)$/
listener.start
end