public
Description: A collection of tools for people actively working on DataMapper
Homepage: http://datamapper.org/
Clone URL: git://github.com/dkubb/dm-dev.git
Dan Kubb (author)
Mon Jan 26 21:26:33 -0800 2009
commit  177822353c4d96840c050c8a038bbb25487ff4a9
tree    0d671b87a78c7298625899b5ec38eb3fecffcd34
parent  a59d281b5cf25312f90fcad8f0960559d6f70be2
dm-dev / dm-dev.sake
100644 208 lines (174 sloc) 5.916 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
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