reap 6.0.2 → 9.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/COPYING +666 -395
- data/MANIFEST +139 -0
- data/NOTES +12 -0
- data/README +19 -163
- data/bin/reap-announce +7 -0
- data/bin/reap-check-load +8 -0
- data/bin/reap-check-syntax +7 -0
- data/bin/reap-clean +7 -0
- data/bin/reap-clobber +7 -0
- data/bin/reap-doc +7 -0
- data/bin/reap-doc-rdoc +7 -0
- data/bin/reap-doc-ri +7 -0
- data/bin/reap-init +69 -0
- data/bin/reap-inspect +7 -0
- data/bin/reap-install +8 -0
- data/bin/reap-install-gem +8 -0
- data/bin/reap-log +7 -0
- data/bin/reap-log-changes +8 -0
- data/bin/reap-log-notes +8 -0
- data/bin/reap-make +7 -0
- data/bin/reap-make-clean +7 -0
- data/bin/reap-make-distclean +7 -0
- data/bin/reap-make-extconf +7 -0
- data/bin/reap-make-static +8 -0
- data/bin/reap-package +8 -0
- data/bin/reap-package-gem +7 -0
- data/bin/reap-package-tgz +7 -0
- data/bin/reap-package-zip +7 -0
- data/bin/reap-prepare +7 -0
- data/bin/reap-publish +7 -0
- data/bin/reap-release +7 -0
- data/bin/reap-scaffold +8 -0
- data/bin/reap-scm-branch +7 -0
- data/bin/reap-scm-tag +7 -0
- data/bin/reap-spec +7 -0
- data/bin/reap-spec-doc +8 -0
- data/bin/reap-stamp +7 -0
- data/bin/reap-stats +7 -0
- data/bin/reap-test +7 -0
- data/bin/reap-test-cross +7 -0
- data/bin/reap-test-load +9 -0
- data/bin/reap-test-solo +7 -0
- data/bin/reap-uninstall +7 -0
- data/bin/reap-uninstall-gem +7 -0
- data/data/reap/base/CHANGES +19 -0
- data/data/reap/base/COPYING +674 -0
- data/data/reap/base/NOTES +12 -0
- data/data/reap/base/README +8 -0
- data/data/reap/build/rake/Rakefile +130 -0
- data/{forge/reference/installers → data/reap/build/rake}/setup.rb +155 -97
- data/data/reap/build/rake-lite/install.rb +79 -0
- data/data/reap/build/tasks/task/rdoc +211 -0
- data/data/reap/{setup.rb → build/tasks/task/setup} +248 -200
- data/data/reap/build/tasks/task/test +38 -0
- data/data/reap/init/meta/project.yaml +21 -0
- data/demo/README +15 -0
- data/demo/lib/foo/foo.rb +7 -0
- data/demo/meta/VERSION +1 -0
- data/demo/meta/project.yaml +21 -0
- data/lib/reap/application.rb +80 -0
- data/lib/reap/default.yaml +77 -0
- data/lib/reap/extensions/array.rb +50 -0
- data/lib/reap/extensions/hash.rb +63 -0
- data/lib/reap/extensions/string.rb +31 -0
- data/lib/reap/extensions.rb +6 -0
- data/lib/reap/iobject.rb +264 -0
- data/lib/reap/manager/announce.rb +193 -0
- data/lib/reap/manager/check.rb +109 -0
- data/lib/reap/manager/clean.rb +58 -0
- data/lib/reap/manager/gem.rb +200 -0
- data/lib/reap/manager/html.rb +69 -0
- data/lib/reap/manager/log.rb +214 -0
- data/lib/reap/manager/make.rb +109 -0
- data/lib/reap/manager/pack.rb +232 -0
- data/lib/reap/manager/publish.rb +72 -0
- data/lib/reap/manager/rdoc.rb +194 -0
- data/lib/reap/manager/release.rb +78 -0
- data/lib/reap/manager/rubyforge.rb +44 -0
- data/lib/reap/manager/scaffold.rb +138 -0
- data/lib/reap/manager/scm.rb +66 -0
- data/lib/reap/manager/site.rb +27 -0
- data/lib/reap/manager/spec.rb +94 -0
- data/lib/reap/manager/stats.rb +145 -0
- data/lib/reap/manager/svn.rb +76 -0
- data/lib/reap/manager/test.rb +389 -0
- data/lib/reap/manager.rb +74 -0
- data/lib/reap/metadata.rb +603 -0
- data/lib/reap/project.rb +165 -0
- data/lib/reap/settings.rb +67 -0
- data/lib/reap/systems/rubyforge.rb +737 -0
- data/lib/reap/systems/subversion.rb +333 -0
- data/lib/reap/utilities/fileutils.rb +304 -0
- data/lib/reap/utilities/netutils.rb +221 -0
- data/lib/reap/utilities/setuputils.rb +124 -0
- data/lib/reap/utilities/shellutils.rb +175 -0
- data/log/Changelog.txt +107 -0
- data/log/FIXME.txt +25 -0
- data/log/TODO.txt +72 -0
- data/meta/VERSION +1 -0
- data/meta/description +4 -0
- data/meta/project.yaml +20 -0
- data/task/man +14 -0
- data/task/rdoc +20 -0
- data/{data/reap/scaffold/standard/setup.rb → task/setup} +248 -200
- metadata +225 -153
- data/ProjectInfo +0 -105
- data/bin/reap +0 -5
- data/bin/rubytest +0 -5
- data/data/reap/install.rb +0 -62
- data/data/reap/scaffold/standard/COPYING +0 -403
- data/data/reap/scaffold/standard/ChangeLog +0 -0
- data/data/reap/scaffold/standard/INSTALL +0 -14
- data/data/reap/scaffold/standard/ProjectInfo +0 -77
- data/data/reap/scaffold/standard/README +0 -3
- data/data/reap/scaffold/standard/Rakefile +0 -10
- data/data/reap/scaffold/standard/TODO +0 -0
- data/data/reap/scaffold/subversion/trunk/COPYING +0 -403
- data/data/reap/scaffold/subversion/trunk/ChangeLog +0 -0
- data/data/reap/scaffold/subversion/trunk/INSTALL +0 -14
- data/data/reap/scaffold/subversion/trunk/ProjectInfo +0 -76
- data/data/reap/scaffold/subversion/trunk/README +0 -3
- data/data/reap/scaffold/subversion/trunk/Rakefile +0 -10
- data/data/reap/scaffold/subversion/trunk/TODO +0 -0
- data/data/reap/scaffold/subversion/trunk/setup.rb +0 -1568
- data/forge/ProjectInfo +0 -38
- data/forge/ProjectInfo.rb +0 -76
- data/forge/TODO +0 -10
- data/forge/installer.rb +0 -250
- data/forge/reference/Rakefile +0 -124
- data/forge/reference/Rakefile.htm +0 -69
- data/forge/reference/aRakefile +0 -60
- data/forge/reference/compositepublisher.rb +0 -24
- data/forge/reference/ftptools.rb +0 -139
- data/forge/reference/installers/package.rb +0 -629
- data/forge/reference/license-each.rb +0 -85
- data/forge/reference/publisher.rb +0 -75
- data/forge/reference/rubyforge.rb +0 -247
- data/forge/reference/rubyforgepublisher.rb +0 -18
- data/forge/reference/sshpublisher.rb +0 -47
- data/forge/reference/suby-cvs.rb +0 -46
- data/forge/scaffold.rb +0 -126
- data/forge/unit_runner/README +0 -6
- data/forge/unit_runner/commentrunner.rb +0 -62
- data/forge/unit_runner/cunit.rb +0 -17
- data/forge/unit_runner/forkedrunner.rb +0 -91
- data/forge/unit_runner/sample.rb +0 -16
- data/lib/reap/bin/reap.rb +0 -230
- data/lib/reap/bin/rubytest.rb +0 -53
- data/lib/reap/class/announce.rb +0 -220
- data/lib/reap/class/doap.rb +0 -80
- data/lib/reap/class/extest.rb +0 -146
- data/lib/reap/class/filer.rb +0 -62
- data/lib/reap/class/manifest.rb +0 -68
- data/lib/reap/class/package.rb +0 -576
- data/lib/reap/class/publish.rb +0 -152
- data/lib/reap/class/rdoc.rb +0 -123
- data/lib/reap/class/test.rb +0 -264
- data/lib/reap/projectinfo.rb +0 -208
- data/lib/reap/rake.rb +0 -42
- data/lib/reap/reap.rb +0 -89
- data/lib/reap/tasks.rb +0 -756
- data/lib/reap/taskutils.rb +0 -122
- data/note/LATEST +0 -44
- data/note/doap.xml +0 -28
- data/note/history/Rakefile-0.1 +0 -308
- data/sample/ProjectInfo +0 -96
- data/sample/Rakefile +0 -9
- data/sample/Reapfile +0 -11
- data/sample/task/demo.rb +0 -15
- data/setup.rb +0 -1568
- data/web/ProjectInfo.html +0 -75
- data/web/images/grape.jpg +0 -0
- data/web/index.html +0 -312
data/lib/reap/tasks.rb
DELETED
@@ -1,756 +0,0 @@
|
|
1
|
-
require 'reap/taskutils'
|
2
|
-
|
3
|
-
# Tasks is the namespace in which to define task generators.
|
4
|
-
|
5
|
-
module Tasks
|
6
|
-
|
7
|
-
# Even task generators might use the task tools.
|
8
|
-
|
9
|
-
include Reap::TaskUtils
|
10
|
-
|
11
|
-
#--
|
12
|
-
# Help system has been deprecated for the time being.
|
13
|
-
#def self.help( name, text )
|
14
|
-
# @help ||= {}
|
15
|
-
# @help[name] = text
|
16
|
-
#end
|
17
|
-
#++
|
18
|
-
|
19
|
-
# Used to determine task generator availablity.
|
20
|
-
#--
|
21
|
-
# TODO This is kind of a weak point in the design, I think.
|
22
|
-
# And tasks themselves also need to have Rake's #needed? feature.
|
23
|
-
#++
|
24
|
-
|
25
|
-
def self.available
|
26
|
-
@available ||= {}
|
27
|
-
end
|
28
|
-
|
29
|
-
# Used to set task generator availablity condition.
|
30
|
-
|
31
|
-
def self.avail( name, &cond )
|
32
|
-
available[name] = cond
|
33
|
-
end
|
34
|
-
|
35
|
-
# == Announce
|
36
|
-
#
|
37
|
-
# The announce task is intended for sending out a nice
|
38
|
-
# formated email message to a mailing address, especially
|
39
|
-
# mailing-lists.
|
40
|
-
#
|
41
|
-
# Announcement specific settings:
|
42
|
-
#
|
43
|
-
# server Email server to route message.
|
44
|
-
# port Email server's port.
|
45
|
-
# domain Email server's domain name.
|
46
|
-
# account Email account name.
|
47
|
-
# type Login type, either plain, cram_md5 or login.
|
48
|
-
# secure Uses TLS security, true or false?
|
49
|
-
# to Email address to send announcemnt.
|
50
|
-
# from Email address sent from.
|
51
|
-
# subject Subject of email message.
|
52
|
-
# links Array of http links to related sites.
|
53
|
-
# file File that contains announcement message.
|
54
|
-
# memo Embedded announcement message.
|
55
|
-
# slogan Motto for you project.
|
56
|
-
#
|
57
|
-
# Inherited settings:
|
58
|
-
#
|
59
|
-
# title Project title.
|
60
|
-
# summary Brief one-line description.
|
61
|
-
# description Long description of project.
|
62
|
-
# homepage Project homepage web address.
|
63
|
-
#
|
64
|
-
|
65
|
-
def announce( name, &data )
|
66
|
-
|
67
|
-
require 'reap/class/announce.rb'
|
68
|
-
|
69
|
-
desc "Email project announcement" unless desc
|
70
|
-
|
71
|
-
task name do
|
72
|
-
data = data.to_openobject
|
73
|
-
data.title ||= master.title
|
74
|
-
data.description ||= master.description
|
75
|
-
data.version ||= master.version
|
76
|
-
data.from ||= master.email
|
77
|
-
Reap::Announce.new( data ).write_and_email
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
# == Backup
|
83
|
-
#
|
84
|
-
# Backup your project to a backup directory.
|
85
|
-
# The location of the backup will be under the
|
86
|
-
# backup +dir+ given in the backup section of the
|
87
|
-
# ProjectInfo file, then under the name of the
|
88
|
-
# project's dir and a subdirectory of today's date.
|
89
|
-
# For example, today reap itself was backed up to:
|
90
|
-
#
|
91
|
-
# ../BACKUPS/reap/2006-06-21/reap
|
92
|
-
#
|
93
|
-
# Backup specific settings:
|
94
|
-
#
|
95
|
-
# dir The backup directory (eg. '../BACKUPS').
|
96
|
-
|
97
|
-
def backup( name, &data )
|
98
|
-
|
99
|
-
desc "Backup project folder" unless desc
|
100
|
-
|
101
|
-
task name do
|
102
|
-
data = data.to_openobject
|
103
|
-
if data.dir
|
104
|
-
bdir = ::File.join( ::File.basename(Dir.pwd), Time.now.strftime("%Y_%m_%d") )
|
105
|
-
bdir = ::File.join( data.dir, bdir )
|
106
|
-
if File.exist?( bdir ) and not $FORCE
|
107
|
-
tell bdir
|
108
|
-
tell "Backup folder already exists. Use -f to overwrite."
|
109
|
-
else
|
110
|
-
if $PRETEND
|
111
|
-
puts "rm -r #{bdir}"
|
112
|
-
puts "mkdir -p #{bdir}"
|
113
|
-
puts "cp -r #{Dir.pwd} #{bdir}"
|
114
|
-
else
|
115
|
-
FileUtils.rm_r( bdir ) if File.exist?( bdir )
|
116
|
-
FileUtils.mkdir_p( bdir )
|
117
|
-
FileUtils.cp_r( Dir.pwd, bdir)
|
118
|
-
end
|
119
|
-
tell "Completed backup to '#{bdir}'."
|
120
|
-
end
|
121
|
-
else
|
122
|
-
tell "No backup 'dir' setting given for backup task."
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
# == Doap
|
129
|
-
#
|
130
|
-
# This task generates an XML DOAP project file.
|
131
|
-
#
|
132
|
-
# DOAP is an XML/RTF format for describing a project. It contains
|
133
|
-
# much of the same information as Reap's ProjectInfo file, but is
|
134
|
-
# more suitable to RESTful interapplication communications, like
|
135
|
-
# RSS/Atom feeds --useful to project tracking sites.
|
136
|
-
#
|
137
|
-
# The task gets almost all of the required parametes from the root
|
138
|
-
# node (i.e. master) of ProjectInfo file.
|
139
|
-
|
140
|
-
def doap( name, &data )
|
141
|
-
|
142
|
-
require 'reap/class/doap.rb'
|
143
|
-
|
144
|
-
desc "Generate DOAP project file" unless desc
|
145
|
-
|
146
|
-
task name do
|
147
|
-
data = data.to_openobject
|
148
|
-
Reap::Doap.new( data.__merge__( master ) ).call
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
avail :doap do
|
154
|
-
ProjectInfo.exists?
|
155
|
-
end
|
156
|
-
|
157
|
-
# == ExTest (Extract Tests)
|
158
|
-
#
|
159
|
-
# This task scans every package script looking for sections of the form:
|
160
|
-
#
|
161
|
-
# =begin test
|
162
|
-
# ...
|
163
|
-
# =end
|
164
|
-
#
|
165
|
-
# With appropriate headers, it copies these sections to files in your
|
166
|
-
# project's test/ dir, which then can be run using the Reap test task.
|
167
|
-
# The exact directory layout of the files to be tested is reflected in
|
168
|
-
# the test directory. You can then use Reap's test task to run the tests.
|
169
|
-
#
|
170
|
-
# Specific Settings:
|
171
|
-
#
|
172
|
-
# dir Specify the test directory. Default is 'test'.
|
173
|
-
# files Specify files to extract. Default is 'lib/**/*.rb'.
|
174
|
-
#
|
175
|
-
|
176
|
-
def extest( name, &data )
|
177
|
-
|
178
|
-
require 'reap/class/extest.rb'
|
179
|
-
|
180
|
-
desc "Extract embedded unit tests from scripts" unless desc
|
181
|
-
|
182
|
-
task name do
|
183
|
-
data = data.to_openobject
|
184
|
-
Reap::ExTest.new( data ).extract
|
185
|
-
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
# == File
|
190
|
-
|
191
|
-
def file( name, &exe )
|
192
|
-
|
193
|
-
require 'reap/class/filer'
|
194
|
-
|
195
|
-
name, source = preq_from_name( name )
|
196
|
-
|
197
|
-
task name do
|
198
|
-
Reap::Filer.new( name, source, &exe ).build
|
199
|
-
end
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
# == Info
|
204
|
-
#
|
205
|
-
# Displays the ProjectInfo file. This task is of little use
|
206
|
-
# --it's easy enough to look at a ProjectInfo file with
|
207
|
-
# less or your favorite editor. Mainly this task serves as
|
208
|
-
# a development example.
|
209
|
-
|
210
|
-
def info( name )
|
211
|
-
|
212
|
-
desc "Display ProjectInfo file" unless desc
|
213
|
-
|
214
|
-
task name do
|
215
|
-
puts ProjectInfo.instance.info_stream
|
216
|
-
end
|
217
|
-
|
218
|
-
end
|
219
|
-
|
220
|
-
avail :info do
|
221
|
-
ProjectInfo.exists?
|
222
|
-
end
|
223
|
-
|
224
|
-
#--
|
225
|
-
# # == Installer
|
226
|
-
# #
|
227
|
-
# # The installer task generates a specialized
|
228
|
-
# # install.rb script specifically for your
|
229
|
-
# # project. It currently does not support c/c++
|
230
|
-
# # ext/ compilation.
|
231
|
-
# #
|
232
|
-
# # template Template for installation. (See below)
|
233
|
-
# # options Hash of variable options. Project name
|
234
|
-
# # and version are automatically added this.
|
235
|
-
# #
|
236
|
-
# # The template is a special configuration for installation.
|
237
|
-
# # It should be a literal string with each line containing
|
238
|
-
# # four parts seprated by spaces.
|
239
|
-
# #
|
240
|
-
# # [type] [from] [glob] [to]
|
241
|
-
# #
|
242
|
-
# # There are five types: bin, lib, ext, etc (or conf) and data.
|
243
|
-
# #
|
244
|
-
# # The template use variables in the from of $name. These are filled
|
245
|
-
# # in using the options hash.
|
246
|
-
# #
|
247
|
-
# # Here's a basic example of an entry:
|
248
|
-
# #
|
249
|
-
# # ins: !!installer
|
250
|
-
# # template: |
|
251
|
-
# # bin bin * .
|
252
|
-
# # lib lib **/* $name/$version
|
253
|
-
# #
|
254
|
-
#
|
255
|
-
# def installer( name, &data )
|
256
|
-
#
|
257
|
-
# require 'reap/class/installer'
|
258
|
-
#
|
259
|
-
# desc "Generate install.rb script" unless desc
|
260
|
-
#
|
261
|
-
# task name do
|
262
|
-
# data = data.to_openobject
|
263
|
-
#
|
264
|
-
# data.name ||= master.name
|
265
|
-
# data.version ||= master.version
|
266
|
-
#
|
267
|
-
# i = Reap::Installer.new( data )
|
268
|
-
# puts i.compile #_and_write
|
269
|
-
# end
|
270
|
-
#
|
271
|
-
# end
|
272
|
-
#++
|
273
|
-
|
274
|
-
# == Count
|
275
|
-
#
|
276
|
-
# Count the file and lines of code in your project.
|
277
|
-
#
|
278
|
-
# dir The directory of scripts to count.
|
279
|
-
#
|
280
|
-
|
281
|
-
def count( name, &data )
|
282
|
-
|
283
|
-
desc "Line count project scripts" unless desc
|
284
|
-
|
285
|
-
task name do
|
286
|
-
data = data.to_openobject
|
287
|
-
incl = data.include || 'lib/**/*'
|
288
|
-
|
289
|
-
fc, l, c, t, bt, r, rb = 0, 0, 0, 0, false, 0, false
|
290
|
-
Dir.glob( incl ).each do |fname|
|
291
|
-
next unless fname =~ /.*rb/ # TODO should this be done?
|
292
|
-
fc += 1
|
293
|
-
File.open( fname ) do |f|
|
294
|
-
while line = f.gets
|
295
|
-
l += 1
|
296
|
-
next if line =~ /^\s*$/
|
297
|
-
case line
|
298
|
-
when /^=begin\s+test/
|
299
|
-
tb = true; t+=1
|
300
|
-
when /^=begin/
|
301
|
-
rb = true; r+=1
|
302
|
-
when /^=end/
|
303
|
-
r+=1 if !(rb or tb)
|
304
|
-
(rb = false; r+=1) if rb
|
305
|
-
(tb = false; t+=1) if tb
|
306
|
-
when /^\s*#/
|
307
|
-
r += 1
|
308
|
-
else
|
309
|
-
c+=1 if !(rb or tb)
|
310
|
-
r+=1 if rb
|
311
|
-
t+=1 if tb
|
312
|
-
end
|
313
|
-
end
|
314
|
-
end
|
315
|
-
end
|
316
|
-
s = l - c - r
|
317
|
-
puts "FILES: #{fc}, LINES: #{l}, CODE: #{c}, DOC: #{r}, TEST: #{t}, SPACE: #{s}"
|
318
|
-
end
|
319
|
-
|
320
|
-
end
|
321
|
-
|
322
|
-
# == Manifest
|
323
|
-
#
|
324
|
-
# Create a manifest file for the package. Presently it is a very simple
|
325
|
-
# md5 + filename manifest. In the future this will be exanded to build
|
326
|
-
# a varity of manifest formats.
|
327
|
-
#
|
328
|
-
# Task specific settings:
|
329
|
-
#
|
330
|
-
# include Files to include
|
331
|
-
# exclude Files to exclude from the included.
|
332
|
-
#
|
333
|
-
|
334
|
-
def manifest( name, &data )
|
335
|
-
|
336
|
-
require 'reap/class/manifest'
|
337
|
-
|
338
|
-
desc "Create a MANIFEST file for this package" unless desc
|
339
|
-
|
340
|
-
task name do
|
341
|
-
data = data.to_openobject
|
342
|
-
Reap::Manifest.new( data ).generate
|
343
|
-
end
|
344
|
-
|
345
|
-
end
|
346
|
-
|
347
|
-
# == Package
|
348
|
-
#
|
349
|
-
# This task creates standard .zip, .tgz, or .tbz
|
350
|
-
# packages, plus .gem or .deb distributions.
|
351
|
-
#
|
352
|
-
# Builds distribution packages. The package task supports
|
353
|
-
# tar.gz, tar.bz2, zip source packages and gem, pacman and
|
354
|
-
# debian ditribution packages.
|
355
|
-
#
|
356
|
-
# Task specific settings:
|
357
|
-
#
|
358
|
-
# dir Directory in which to store distributions.
|
359
|
-
# include Files to include in distribution.
|
360
|
-
# exclude Files to exclude from those.
|
361
|
-
# distribute List of distribution types desired. Eg.
|
362
|
-
# tgz, tar.gz, tbz, tar.bz2, zip
|
363
|
-
# gem, deb, pac
|
364
|
-
# project Project name.
|
365
|
-
# category Software category.
|
366
|
-
# architecture Can be any, i368, i686, ppc, etc.
|
367
|
-
# dependencies List of packages this program depends.
|
368
|
-
# recommends List of packages that can be used with this package.
|
369
|
-
# replaces List of packages this one replaces.
|
370
|
-
# executables Executable files in this distribution.
|
371
|
-
# rules (see below)
|
372
|
-
#
|
373
|
-
# RubyGems specific settings:
|
374
|
-
#
|
375
|
-
# autorequire
|
376
|
-
# platform
|
377
|
-
# require_paths
|
378
|
-
#
|
379
|
-
# The package task also has subsection for each type of distribution.
|
380
|
-
# These can be used to override settings in the package information
|
381
|
-
# if they in some way differ. Possible subsections are:
|
382
|
-
#
|
383
|
-
# gems
|
384
|
-
# pacman
|
385
|
-
# debian
|
386
|
-
#
|
387
|
-
# Finally there is one last parameter that you can use for creating packages
|
388
|
-
# called 'rules'. The rules setting allows you to define how files are
|
389
|
-
# copied into the distribution package, so instead of a one to one copy
|
390
|
-
# of the included files, you can actually have a file placed in a different
|
391
|
-
# location within the distribution. This can be very handy if you wish to
|
392
|
-
# develop you project with one layout, but need to distribute it with another.
|
393
|
-
#
|
394
|
-
# The rules parameter is a literal string that consists of one rule per line.
|
395
|
-
# A line consists three space separated entries.
|
396
|
-
#
|
397
|
-
# from_path, file_glob, to_path
|
398
|
-
#
|
399
|
-
# If no 'to_path' is given then it is considered the same as the 'from_path'.
|
400
|
-
# It also supports two variables $name and $version which will be substitued
|
401
|
-
# any of these entries. Here is a possible example:
|
402
|
-
#
|
403
|
-
# rules: |
|
404
|
-
# lib **/* lib/$name/$version
|
405
|
-
#
|
406
|
-
# This will move any file under lib/ to the equivalent location under lib/$name/$version/.
|
407
|
-
# The default set of rules is a mirror image transfer, spelled out it would be:
|
408
|
-
#
|
409
|
-
# rules: |
|
410
|
-
# bin *
|
411
|
-
# ext **/*
|
412
|
-
# lib **/*
|
413
|
-
# data **/*
|
414
|
-
# conf **/*
|
415
|
-
#
|
416
|
-
# If your using Rolls against a normal project folder the alterntive is to create
|
417
|
-
# versioned paths, probably as follows:
|
418
|
-
#
|
419
|
-
# rules: |
|
420
|
-
# ext/$name **/* ext/$name/$version
|
421
|
-
# lib/$name **/* lib/$name/$version
|
422
|
-
# data/$name **/* ext/$name/$version
|
423
|
-
# conf/$name **/* ext/$name/$version ?
|
424
|
-
#
|
425
|
-
# Please note that the rules parameter is a new feature and is still considered beta.
|
426
|
-
|
427
|
-
def package( name, &data )
|
428
|
-
|
429
|
-
require 'reap/class/package'
|
430
|
-
|
431
|
-
desc "Create distribution packages" unless desc
|
432
|
-
|
433
|
-
task name do
|
434
|
-
data = data.to_openobject
|
435
|
-
|
436
|
-
data.name ||= master.name
|
437
|
-
data.title ||= master.title
|
438
|
-
data.version ||= master.version
|
439
|
-
data.status ||= master.status
|
440
|
-
data.series ||= master.series
|
441
|
-
data.author ||= master.author
|
442
|
-
data.maintainer ||= master.maintainer
|
443
|
-
data.email ||= master.email
|
444
|
-
data.summary ||= master.summary
|
445
|
-
data.architecture ||= master.architecture
|
446
|
-
data.license ||= master.license
|
447
|
-
data.project ||= master.project
|
448
|
-
data.homepage ||= master.homepage
|
449
|
-
|
450
|
-
Reap::Package.new( data ).generate_packages
|
451
|
-
end
|
452
|
-
|
453
|
-
end
|
454
|
-
|
455
|
-
# == Publish
|
456
|
-
#
|
457
|
-
# Publish documents to hosting service. Three means of
|
458
|
-
# publishing are current supported, ftp uploading, scp,
|
459
|
-
# and web convenience option that recognizes particular
|
460
|
-
# hosts (only RubyForge is currently supported).
|
461
|
-
#
|
462
|
-
# type Type of publishing, 'web', 'scp' or 'ftp'.
|
463
|
-
# host Host server, default is 'rubyforge.org'
|
464
|
-
# username Username for host.
|
465
|
-
# dir Directory of files to publish. Or,
|
466
|
-
# copy Files to publish using from and to.
|
467
|
-
# project Project name (used for Rubyforge)
|
468
|
-
#
|
469
|
-
# If the type is 'scp' or 'ftp' you will also need to provide
|
470
|
-
# the root directory parameter.
|
471
|
-
#
|
472
|
-
# root Document root directory at host.
|
473
|
-
#
|
474
|
-
# The dir parameter allows you to simply specify a local
|
475
|
-
# directory, the contents of which will be published to
|
476
|
-
# host's document root location (directory tree intact).
|
477
|
-
#
|
478
|
-
# If you need more control over which files to publish
|
479
|
-
# where, you can use the copy parameter instead. Provide
|
480
|
-
# an array of pattern strings in the form of "{from} {to}".
|
481
|
-
# If the desitination is the host's document root you do
|
482
|
-
# not need to specify the {to} part. For example:
|
483
|
-
#
|
484
|
-
# copy: [ 'web/*', 'doc/api/* doc/api' ]
|
485
|
-
#
|
486
|
-
# The first copies the files under your project's web directory
|
487
|
-
# to the host's document root. The second copies your projects
|
488
|
-
# doc/api files to the doc/api location on the host.
|
489
|
-
#
|
490
|
-
# When using the 'scp' type the internal template used for
|
491
|
-
# the outbound destination is 'username@host:root/'.
|
492
|
-
|
493
|
-
def publish( name, &data )
|
494
|
-
|
495
|
-
require 'reap/class/publish.rb'
|
496
|
-
|
497
|
-
desc "Publish documents to the web or host" unless desc
|
498
|
-
|
499
|
-
task name do
|
500
|
-
data = data.to_openobject
|
501
|
-
|
502
|
-
data.project ||= master.rubyforge.project || master.name
|
503
|
-
data.username ||= master.rubyforge.username
|
504
|
-
|
505
|
-
Reap::Publish.new( data ).publish
|
506
|
-
end
|
507
|
-
|
508
|
-
end
|
509
|
-
|
510
|
-
# == RDoc
|
511
|
-
#
|
512
|
-
# This task generates RDoc API documentation from source
|
513
|
-
# comments.
|
514
|
-
#
|
515
|
-
# Task specific settings:
|
516
|
-
#
|
517
|
-
# dir Directory to store documentation [doc].
|
518
|
-
# main File to use as main page of RDocs.
|
519
|
-
# template Which RDoc template to use.
|
520
|
-
# include Files to include in RDocs.
|
521
|
-
# exclude Files to exclude from those.
|
522
|
-
# options Pass-thru extra options to RDoc command.
|
523
|
-
#
|
524
|
-
# Inherited settings:
|
525
|
-
#
|
526
|
-
# title Project title to use in RDocs.
|
527
|
-
#
|
528
|
-
|
529
|
-
def rdoc( name, &data )
|
530
|
-
|
531
|
-
require 'reap/class/rdoc'
|
532
|
-
|
533
|
-
desc "Generate RDoc API documentation" unless desc
|
534
|
-
|
535
|
-
task name do
|
536
|
-
data = data.to_openobject
|
537
|
-
|
538
|
-
data.title ||= master.title
|
539
|
-
|
540
|
-
Reap::RDoc.new( data ).call
|
541
|
-
end
|
542
|
-
|
543
|
-
end
|
544
|
-
|
545
|
-
# == Release
|
546
|
-
#
|
547
|
-
# This task releases files to RubyForge --it should work with other
|
548
|
-
# GForge instaces or SourceForge clones too.
|
549
|
-
#
|
550
|
-
# While defaults are nice, you may want a little more control. You can
|
551
|
-
# specify additional attributes:
|
552
|
-
#
|
553
|
-
# dir Distribution directory
|
554
|
-
# exclude Distribution types to exclude
|
555
|
-
# host URL of host service
|
556
|
-
# username Username of host service
|
557
|
-
# project Project name at host
|
558
|
-
# package Package name
|
559
|
-
# date Date of release (defaults to Time.now)
|
560
|
-
# groupid Group id number
|
561
|
-
# processor Processor/Architecture (Any, i386, PPC, etc.)
|
562
|
-
# release Release name (default is "%s")
|
563
|
-
# is_public Public release?
|
564
|
-
# changelog Change log file
|
565
|
-
# notelog Release notes file
|
566
|
-
#
|
567
|
-
# The release option can be a template by using %s in the
|
568
|
-
# string. The version number of your project will be sub'd
|
569
|
-
# in for the %s. This saves you from having to update
|
570
|
-
# the release name before every release.
|
571
|
-
|
572
|
-
def release( name, &data )
|
573
|
-
|
574
|
-
require 'reap/class/release'
|
575
|
-
|
576
|
-
desc "Release distribution files" unless desc
|
577
|
-
|
578
|
-
task name do
|
579
|
-
data = data.to_openobject
|
580
|
-
|
581
|
-
data.version = master.version
|
582
|
-
data.project ||= master.rubyforge.project || master.name
|
583
|
-
data.username ||= master.rubyforge.username
|
584
|
-
data.package ||= master.rubyforge.package
|
585
|
-
data.groupid ||= master.rubyforge.groupid
|
586
|
-
|
587
|
-
Reap::Release.new( data ).release
|
588
|
-
end
|
589
|
-
|
590
|
-
end
|
591
|
-
|
592
|
-
# == Scaffold
|
593
|
-
#
|
594
|
-
# Generates a project directory layout within the current
|
595
|
-
# directory. The scaffolding includes all the standard
|
596
|
-
# features such as directories lib/ bin/ doc/
|
597
|
-
# and files such as README.
|
598
|
-
#
|
599
|
-
# To use this task you should first create an empty
|
600
|
-
# directory and than change into it. This command will
|
601
|
-
# not create a new project directory. As a safegaurd, this
|
602
|
-
# command will not generate scaffolding in a directory with
|
603
|
-
# files already present, unless you use the -f (force) option.
|
604
|
-
#
|
605
|
-
# There are currently two types of supported scaffoldings:
|
606
|
-
# 'standard', which is the default if no type is given,
|
607
|
-
# and 'subversion' which creates a "trunk" hierarchy.
|
608
|
-
|
609
|
-
def scaffold( name )
|
610
|
-
|
611
|
-
desc "Generate a project directory layout" unless desc
|
612
|
-
|
613
|
-
task name do |type|
|
614
|
-
content = Dir.entries('.') - [ '.', '..' ]
|
615
|
-
if not content.empty? and not $FORCE
|
616
|
-
tell "Directory already has content. Use -f option to force scaffolding."
|
617
|
-
return nil
|
618
|
-
end
|
619
|
-
type ||= 'standard'
|
620
|
-
type = 'standard' if type == 'std'
|
621
|
-
type = 'subversion' if type == 'svn'
|
622
|
-
# gems workaround
|
623
|
-
if dir = Gem.gempath('reap')
|
624
|
-
dir = File.join( dir, 'data', 'reap', 'scaffold', type )
|
625
|
-
else
|
626
|
-
dir = File.join( ::Config::CONFIG['datadir'], 'reap', 'scaffold', type )
|
627
|
-
end
|
628
|
-
#
|
629
|
-
unless File.directory?( dir )
|
630
|
-
tell "Unrecognized project type."
|
631
|
-
else
|
632
|
-
#FileUtils.mkdir_p( name )
|
633
|
-
FileUtils.cp_r( File.join( dir, '.'), '.' )
|
634
|
-
tell "Project ready."
|
635
|
-
end
|
636
|
-
end
|
637
|
-
|
638
|
-
end
|
639
|
-
|
640
|
-
avail :scaffold do
|
641
|
-
! ProjectInfo.exists?
|
642
|
-
end
|
643
|
-
|
644
|
-
# == Setup
|
645
|
-
#
|
646
|
-
# This task manually installs a project using setup.rb.
|
647
|
-
# If setup.rb doesn't exist it will be created.
|
648
|
-
|
649
|
-
def setup( name, &data )
|
650
|
-
|
651
|
-
desc "Locally install package using setup.rb" unless desc
|
652
|
-
|
653
|
-
task name do
|
654
|
-
data = data.to_openobject
|
655
|
-
|
656
|
-
data.options ||= []
|
657
|
-
|
658
|
-
unless provide_setup_rb
|
659
|
-
puts "Setup.rb is missing. Forced to cancel task."
|
660
|
-
return nil
|
661
|
-
end
|
662
|
-
|
663
|
-
puts "Reap is shelling out work to setup.rb..."
|
664
|
-
|
665
|
-
#--
|
666
|
-
# SHELL OUT! This will be fixed with swtich to Reap's installer instead of setup.rb.
|
667
|
-
#++
|
668
|
-
exe = %{ruby setup.rb}
|
669
|
-
exe << ' -q ' unless $VERBOSE
|
670
|
-
exe << data.options.join(' ')
|
671
|
-
exe << ' all'
|
672
|
-
|
673
|
-
#success = false
|
674
|
-
success = sh( exe )
|
675
|
-
|
676
|
-
puts "Setup complete!" if success
|
677
|
-
end
|
678
|
-
|
679
|
-
end
|
680
|
-
|
681
|
-
# == Template
|
682
|
-
#
|
683
|
-
# Creates an empty ProjectInfo file in the current directory.
|
684
|
-
# It will not overwrite a ProjectInfo file if one is already
|
685
|
-
# present. Unlike 'scaffold', this is especially useful for
|
686
|
-
# pre-existing projects.
|
687
|
-
|
688
|
-
def template( name )
|
689
|
-
|
690
|
-
require 'facet/gem/self/gempath'
|
691
|
-
|
692
|
-
desc "Create a ProjectInfo template" unless desc
|
693
|
-
|
694
|
-
task name do
|
695
|
-
f = nil
|
696
|
-
if ::ProjectInfo::INFO_FILES.any?{ |f| File.exists?(f) }
|
697
|
-
puts "Project file '#{f}' already exists."
|
698
|
-
return
|
699
|
-
end
|
700
|
-
filename = 'ProjectInfo'
|
701
|
-
# if using gems
|
702
|
-
if dir = Gem.gempath('reap')
|
703
|
-
dir = File.join( dir, 'data', 'reap', 'scaffold', 'standard' )
|
704
|
-
else
|
705
|
-
dir = File.join( ::Config::CONFIG['datadir'], 'reap', 'scaffold', 'standard' )
|
706
|
-
end
|
707
|
-
f = File.join( dir, filename )
|
708
|
-
raise "ProjectInfo template file #{f} is missing." unless File.file?( f )
|
709
|
-
# copy
|
710
|
-
FileUtils.install( f, '.' )
|
711
|
-
tell "#{filename} created. You'll need to fill it out."
|
712
|
-
end
|
713
|
-
|
714
|
-
end
|
715
|
-
|
716
|
-
avail :template do
|
717
|
-
! ProjectInfo.exists?
|
718
|
-
end
|
719
|
-
|
720
|
-
# == Test
|
721
|
-
#
|
722
|
-
# The Reap test class runs each test in it's own
|
723
|
-
# proccess, making for a more pure test facility.
|
724
|
-
# Reap runs each test in a separate proccess to aviod
|
725
|
-
# potential conflicts between scripts.
|
726
|
-
#
|
727
|
-
# files Test files (eg. test/tc_**/*.rb)
|
728
|
-
# Defaults to typcial selection.
|
729
|
-
#
|
730
|
-
# libs List of lookup directories to include in
|
731
|
-
# load path. './lib' is always included.
|
732
|
-
#
|
733
|
-
# live Flag to quickly deactive use of local libs.
|
734
|
-
# Test against installed files instead.
|
735
|
-
#
|
736
|
-
# requires List of any files to pre-require.
|
737
|
-
#
|
738
|
-
# NOTE This works well enough but it is a tad delicate.
|
739
|
-
# It actually marshals test results across stdout->stdin
|
740
|
-
# shell pipe. One consequence of this is that you can't
|
741
|
-
# send debug info to stdout in your tests (including #p and #puts).
|
742
|
-
|
743
|
-
def test( name, &data )
|
744
|
-
|
745
|
-
require 'reap/class/test'
|
746
|
-
|
747
|
-
desc "Run unit-tests (each in a separate process)" unless desc
|
748
|
-
|
749
|
-
task name do
|
750
|
-
data = data.to_openobject
|
751
|
-
Reap::Test.new( data ).call
|
752
|
-
end
|
753
|
-
|
754
|
-
end
|
755
|
-
|
756
|
-
end #module Tasks
|