namespace :dm do
# Usage: sake dm:clone
desc 'Clone a copy of the DataMapper repository and dependencies'
task :clone do
require 'pathname'
base_path = Pathname.getwd
unless base_path.basename.to_s == 'dm'
base_path += 'dm'
base_path.mkdir unless base_path.directory?
cd base_path
end
users = {
'datamapper' => %w[ extlib do dm-core dm-more ],
'dkubb' => %w[ dm-dev ]
}
users.each do |user,repos|
repos.each do |r|
path = base_path + r
next if path.directory?
sh "git clone git://github.com/#{user}/#{r}.git"
end
end
end
# Usage: sake dm:update
desc 'Update your local DataMapper. Run from inside the top-level dm directory.'
task :update => %w[ dm:clone ] do
%w[ extlib do dm-core dm-more dm-dev ].each do |r|
puts "Updating #{r}"
cd r
sh 'git checkout master'
sh 'git pull --rebase'
cd '..'
end
end
namespace :gems do
# Usage: sake dm:gems:wipe
desc 'Uninstall all RubyGems related to DataMapper'
task :wipe do
sh "gem list '\\\\A(?:(?:d[mo])[_-]|data_?(?:mapper|objects)|extlib)' --no-versions | xargs -rt #{'sudo' unless ENV['SUDOLESS']} gem uninstall -aIx"
end
# Usage: sake dm:gems:refresh
desc 'Pull fresh copies of DataMapper and refresh all the gems'
task :refresh => %w[ dm:gems:wipe dm:update dm:install ]
end
# Usage: sake dm:install
desc 'Install extlib, do, dm-core and dm-more'
task :install => %w[ dm:install:extlib dm:install:do dm:install:core dm:install:more ]
# Usage: sake dm:refresh
desc 'Pull fresh copies of DataMapper and repackage all the gems. (Use dm:gems:refresh to reinstall them as well)'
task :refresh => %w[ dm:update dm:repackage:extlib dm:repackage:do dm:repackage:core dm:repackage:more ]
namespace :repackage do
# Usage: sake dm:repackage:extlib
desc 'Repackage extlib gem'
task :extlib do
cd 'extlib'
sh 'rake repackage; true'
cd '..'
end
# Usage: sake dm:repackage:dm-core
desc 'Repackage dm-core gem'
task :core do
cd 'dm-core'
sh 'rake repackage; true'
cd '..'
end
# Usage: sake dm:repackage:dm-more
desc 'Repackage dm-more gem'
task :more do
cd 'dm-more'
sh 'rake build_gems; true'
cd '..'
end
# Usage: sake dm:repackage:do
desc 'Repackage do drivers'
task :do => %w[ dm:repackage:do:data_objects dm:repackage:do:postgres dm:repackage:do:mysql dm:repackage:do:sqlite3 ]
namespace :do do
# Usage: sake dm:repackage:do:data_objects
desc 'Repackage data_objects gem'
task :data_objects do
cd 'do/data_objects'
sh 'rake repackage; true'
cd '../..'
end
# Usage: sake dm:repackage:do:do_sqlite3
desc 'Repackage do_sqlite3 gem'
task :sqlite3 do
cd 'do/do_sqlite3'
sh 'rake repackage; true'
cd '../..'
end
# Usage: sake dm:repackage:do:do_mysql
desc 'Repackage do_mysql gem'
task :mysql do
cd 'do/do_mysql'
sh 'rake repackage; true'
cd '../..'
end
# Usage: sake dm:repackage:do:do_postgres
desc 'Repackage do_postgres gem'
task :postgres do
cd 'do/do_postgres'
sh 'rake repackage; true'
cd '../..'
end
end
end
namespace :install do
# Usage: sake dm:install:extlib
desc 'Install extlib'
task :extlib do
cd 'extlib'
sh 'rake install; true'
cd '..'
end
# Usage: sake dm:install:core
desc 'Install dm-core'
task :core do
cd 'dm-core'
sh 'rake install; true'
cd '..'
end
# Usage: sake dm:install:more
desc 'Install dm-more'
task :more do
cd 'dm-more'
sh 'rake install; true'
cd '..'
end
# Usage: sake dm:install:do
desc 'Install do drivers'
task :do do
cd 'do'
sh 'rake install; true'
cd '..'
end
end
namespace :sake do
# Usage: sake dm:sake:refresh
desc 'Remove and reinstall DataMapper sake recipes'
task :refresh do
tasks = []
`sake -T`.each do |line|
next unless match = line.match(/\Asake\s(dm:.+?|strip)\s/)
tasks << match.captures.first
end
sh "sake -u #{tasks * ' '}"
# sh 'sake -i http://datamapper.org/dm-dev.sake'
sh 'sake -i http://github.com/dkubb/dm-dev/raw/master/dm-dev.sake'
end
end
end
desc 'Strip trailing whitespace from source files'
task :strip do
require 'pathname'
require 'zlib'
# files and extensions to process
files = %w[ capfile CHANGELOG LICENSE Manifest MIT-LICENSE README QUICKLINKS README_FOR_APP RUNNING_UNIT_TESTS Rakefile SPECS TODO USAGE .autotest .gitignore .htaccess ].freeze
extensions = %w[ builder cgi conf css deploy erb example fcgi haml htc htm html js key opts php rake ratom rb rcsv rdf rhtml rjs rpdf ru rxml sake sass sh sql thor txt vcf xml yml ].freeze
Pathname.getwd.find do |path|
# skip unreadable, unwritable, .git and .svn directories
Find.prune if (path.directory? && (!path.readable? || !path.writable?)) || %w[ .git .svn ].include?(path.basename.to_s)
# skip non-files, zero-sized files, files not matching specific names, or files without the matching extensions
next unless path.file? && path.size? && (files.include?(path.basename.to_s) || extensions.include?(path.extname[1..-1]))
# replace leading whitespace (including tabs) with spaces
# replace trailing whitespace with a newline
document = path.open('r') do |f|
f.collect { |line| line.gsub(/\G\s/, ' ').rstrip + "\n" }.join.rstrip
end + "\n"
# skip the file if it was not modified
next if Zlib.crc32(document) == Zlib.crc32(path.read)
puts "Stripping whitepsace from #{path}"
path.open('w') { |f| f.write document }
end
end