reap 0.5.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ANN-0.6.1 +3 -0
- data/Rakefile +19 -0
- data/Reapfile +46 -33
- data/data/site_ruby/reap/template.yaml +94 -0
- data/lib/reap/announce-task.rb +159 -0
- data/lib/reap/chmod-task.rb +82 -0
- data/lib/reap/package-task.rb +165 -0
- data/lib/reap/publish-task.rb +53 -0
- data/lib/reap/rdoc-task.rb +70 -0
- data/lib/reap/reap-all.rb +15 -0
- data/lib/reap/task.rb +177 -118
- data/lib/reap/template-task.rb +40 -0
- data/lib/reap/test-task.rb +159 -0
- data/pub/www/Reapfile +99 -0
- data/pub/www/images/appleboy.jpg +0 -0
- data/pub/www/index.html +49 -5
- data/{doc/files/LICENSE.html → pub/www/rdoc/classes/Reap.html} +32 -33
- data/pub/www/rdoc/classes/Reap/AnnounceTask.html +154 -0
- data/pub/www/rdoc/classes/Reap/AnnounceTask.src/M000031.html +111 -0
- data/pub/www/rdoc/classes/Reap/AnnounceTask.src/M000032.html +46 -0
- data/pub/www/rdoc/classes/Reap/ChmodTask.html +220 -0
- data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000015.html +21 -0
- data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000016.html +21 -0
- data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000017.html +42 -0
- data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000018.html +26 -0
- data/pub/www/rdoc/classes/Reap/PackageTask.html +181 -0
- data/pub/www/rdoc/classes/Reap/PackageTask.src/M000001.html +49 -0
- data/pub/www/rdoc/classes/Reap/PackageTask.src/M000002.html +74 -0
- data/pub/www/rdoc/classes/Reap/PackageTask.src/M000003.html +51 -0
- data/pub/www/rdoc/classes/Reap/PublishTask.html +160 -0
- data/pub/www/rdoc/classes/Reap/PublishTask.src/M000019.html +24 -0
- data/pub/www/rdoc/classes/Reap/PublishTask.src/M000020.html +38 -0
- data/pub/www/rdoc/classes/Reap/RDocTask.html +220 -0
- data/pub/www/rdoc/classes/Reap/RDocTask.src/M000004.html +24 -0
- data/pub/www/rdoc/classes/Reap/RDocTask.src/M000005.html +21 -0
- data/pub/www/rdoc/classes/Reap/RDocTask.src/M000006.html +53 -0
- data/pub/www/rdoc/classes/Reap/Task.html +319 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000024.html +21 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000025.html +18 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000026.html +18 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000027.html +28 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000028.html +16 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000029.html +18 -0
- data/pub/www/rdoc/classes/Reap/Task.src/M000030.html +19 -0
- data/pub/www/rdoc/classes/Reap/TemplateTask.html +182 -0
- data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000021.html +18 -0
- data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000022.html +21 -0
- data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000023.html +34 -0
- data/pub/www/rdoc/classes/Reap/TestTask.html +228 -0
- data/pub/www/rdoc/classes/Reap/TestTask.src/M000007.html +25 -0
- data/pub/www/rdoc/classes/Reap/TestTask.src/M000008.html +21 -0
- data/pub/www/rdoc/classes/Reap/TestTask.src/M000009.html +77 -0
- data/pub/www/rdoc/classes/Reap/TestTask.src/M000010.html +27 -0
- data/pub/www/rdoc/classes/Reap/TestTask.src/M000011.html +36 -0
- data/{doc → pub/www/rdoc}/classes/Reap/TestTask/TestResults.html +23 -55
- data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000012.html +21 -0
- data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000013.html +21 -0
- data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000014.html +23 -0
- data/pub/www/rdoc/created.rid +1 -0
- data/{doc/files/lib/reap/tasks → pub/www/rdoc/files/lib/reap2}/announce-task_rb.html +3 -3
- data/{doc/files/lib/reap/task_rb.html → pub/www/rdoc/files/lib/reap2/chmod-task_rb.html} +5 -5
- data/pub/www/{doc/files/lib/reap/tasks → rdoc/files/lib/reap2}/package-task_rb.html +3 -3
- data/pub/www/{doc/files/lib/reap/template_rb.html → rdoc/files/lib/reap2/publish-task_rb.html} +10 -4
- data/pub/www/{doc/files/lib/reap/task_rb.html → rdoc/files/lib/reap2/rdoc-task_rb.html} +5 -5
- data/pub/www/{doc/files/lib/reap/reap_rb.html → rdoc/files/lib/reap2/reap-all_rb.html} +7 -7
- data/{doc/files/lib/reap/runner_rb.html → pub/www/rdoc/files/lib/reap2/task_rb.html} +7 -8
- data/pub/www/{doc/files/lib/reap/tasks → rdoc/files/lib/reap2}/template-task_rb.html +4 -4
- data/{doc/files/lib/reap/tasks → pub/www/rdoc/files/lib/reap2}/test-task_rb.html +10 -4
- data/{doc → pub/www/rdoc}/fr_class_index.html +0 -1
- data/pub/www/rdoc/fr_file_index.html +35 -0
- data/pub/www/rdoc/fr_method_index.html +58 -0
- data/{doc → pub/www/rdoc}/index.html +1 -1
- data/{doc → pub/www/rdoc}/rdoc-style.css +0 -0
- data/test/tc_reap.rb +11 -0
- metadata +98 -112
- data/bin/reap +0 -103
- data/doc/classes/Reap.html +0 -184
- data/doc/classes/Reap/AnnounceTask.html +0 -339
- data/doc/classes/Reap/ChmodTask.html +0 -277
- data/doc/classes/Reap/PackageTask.html +0 -374
- data/doc/classes/Reap/PublishTask.html +0 -237
- data/doc/classes/Reap/RDocTask.html +0 -254
- data/doc/classes/Reap/Runner.html +0 -299
- data/doc/classes/Reap/Task.html +0 -438
- data/doc/classes/Reap/TemplateTask.html +0 -226
- data/doc/classes/Reap/TestTask.html +0 -354
- data/doc/created.rid +0 -1
- data/doc/files/README.html +0 -194
- data/doc/files/lib/reap/reap_rb.html +0 -111
- data/doc/files/lib/reap/tasks/chmod-task_rb.html +0 -101
- data/doc/files/lib/reap/tasks/package-task_rb.html +0 -108
- data/doc/files/lib/reap/tasks/publish-task_rb.html +0 -101
- data/doc/files/lib/reap/tasks/rdoc-task_rb.html +0 -101
- data/doc/files/lib/reap/tasks/template-task_rb.html +0 -109
- data/doc/fr_file_index.html +0 -38
- data/doc/fr_method_index.html +0 -73
- data/lib/reap/reap.rb +0 -13
- data/lib/reap/runner.rb +0 -90
- data/lib/reap/tasks/announce-task.rb +0 -149
- data/lib/reap/tasks/chmod-task.rb +0 -69
- data/lib/reap/tasks/package-task.rb +0 -157
- data/lib/reap/tasks/publish-task.rb +0 -39
- data/lib/reap/tasks/rdoc-task.rb +0 -55
- data/lib/reap/tasks/template-task.rb +0 -39
- data/lib/reap/tasks/test-task.rb +0 -140
- data/pub/www/doc/classes/Reap.html +0 -184
- data/pub/www/doc/classes/Reap/AnnounceTask.html +0 -331
- data/pub/www/doc/classes/Reap/ChmodTask.html +0 -278
- data/pub/www/doc/classes/Reap/PackageTask.html +0 -372
- data/pub/www/doc/classes/Reap/PublishTask.html +0 -231
- data/pub/www/doc/classes/Reap/RDocTask.html +0 -254
- data/pub/www/doc/classes/Reap/Runner.html +0 -307
- data/pub/www/doc/classes/Reap/Task.html +0 -390
- data/pub/www/doc/classes/Reap/TemplateTask.html +0 -233
- data/pub/www/doc/classes/Reap/TestTask.html +0 -242
- data/pub/www/doc/created.rid +0 -1
- data/pub/www/doc/files/LICENSE.html +0 -119
- data/pub/www/doc/files/README.html +0 -194
- data/pub/www/doc/files/lib/reap/runner_rb.html +0 -113
- data/pub/www/doc/files/lib/reap/tasks/announce-task_rb.html +0 -113
- data/pub/www/doc/files/lib/reap/tasks/chmod-task_rb.html +0 -101
- data/pub/www/doc/files/lib/reap/tasks/publish-task_rb.html +0 -101
- data/pub/www/doc/files/lib/reap/tasks/rdoc-task_rb.html +0 -101
- data/pub/www/doc/files/lib/reap/tasks/test-task_rb.html +0 -101
- data/pub/www/doc/fr_class_index.html +0 -36
- data/pub/www/doc/fr_file_index.html +0 -39
- data/pub/www/doc/fr_method_index.html +0 -69
- data/pub/www/doc/index.html +0 -24
- data/pub/www/doc/rdoc-style.css +0 -208
- data/test/tc_require.rb +0 -11
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'reap/task'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rubygems'
|
5
|
+
rescue
|
6
|
+
# no rubygems
|
7
|
+
end
|
8
|
+
|
9
|
+
#
|
10
|
+
# Package Task
|
11
|
+
#
|
12
|
+
# This task allows on to create standard .zip, .tgz, or .tbz
|
13
|
+
# packages, plus create gem distributions.
|
14
|
+
#
|
15
|
+
class Reap::PackageTask < Reap::Task
|
16
|
+
|
17
|
+
section_name :package
|
18
|
+
|
19
|
+
attr_accessor :dir, :name, :version, :package_name,
|
20
|
+
:author, :email, :summary, :project, :homepage,
|
21
|
+
:include, :exclude, :zip, :gzip, :bzip2, :gem,
|
22
|
+
:gem_platform, :gem_autorequire, :gem_dependencies,
|
23
|
+
:requirements, :executables
|
24
|
+
|
25
|
+
def init
|
26
|
+
@dir = section['dir'] || 'pkg'
|
27
|
+
|
28
|
+
@name = section['name'] || master['name']
|
29
|
+
@version = section['version'] || master['version'] || '0.0.1'
|
30
|
+
@package_name = @name + '-' + @version
|
31
|
+
|
32
|
+
@author = section['author'] || master['author']
|
33
|
+
@email = section['email'] || master['email']
|
34
|
+
@summary = section['summary'] || master['summary']
|
35
|
+
@project = section['project'] || master['rubyforge']['project']
|
36
|
+
@homepage = section['homepage'] || master['homepage'] || master['rubyforge']['homepage']
|
37
|
+
|
38
|
+
@include = section['include'] || DEFAULT_INCLUDE
|
39
|
+
@exclude = MUST_EXCLUDE + section['exclude']
|
40
|
+
|
41
|
+
@zip = section['zip'].nil? ? true : section['zip']
|
42
|
+
@gzip = section['gzip'].nil? ? true : section['zip']
|
43
|
+
@bzip2 = section['bzip2'].nil? ? true : section['zip']
|
44
|
+
@gem = section['gem'].nil? ? true : section['gem']
|
45
|
+
|
46
|
+
# gem specific
|
47
|
+
if defined?(Gem)
|
48
|
+
if section['platform']
|
49
|
+
@gem_platform = ::Gem.const_get(section['platform'])
|
50
|
+
else
|
51
|
+
@gem_platform = ::Gem::Platform::RUBY
|
52
|
+
end
|
53
|
+
@gem_autorequire = section['autorequire']
|
54
|
+
@gem_dependencies = section['dependencies'] || []
|
55
|
+
@requirements = section['requirements'] || []
|
56
|
+
@executables = section['executables'] || []
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def define
|
61
|
+
desc "build .tgz, .tbz (.bzip2), .zip and/or .gem packages *"
|
62
|
+
task :package do
|
63
|
+
run_package
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def run_package
|
70
|
+
# create package image
|
71
|
+
if FileTest.directory?(@dir)
|
72
|
+
print "Directory '#{@dir}' already exists. Clobber? [y/N] "
|
73
|
+
until inp = $stdin.gets[0,1] ; sleep 1 ; end
|
74
|
+
if (inp || 'y').downcase == 'y'
|
75
|
+
puts "Removing old directory '#{File.expand_path(@dir)}'..."
|
76
|
+
trash_dir = ".trash/#{File.basename(@dir)}"
|
77
|
+
FileUtils.mkdir_p(".trash") unless FileTest.directory?(".trash")
|
78
|
+
FileUtils.rm_r(trash_dir) if FileTest.exists?(trash_dir)
|
79
|
+
FileUtils.mv(@dir, trash_dir)
|
80
|
+
else
|
81
|
+
puts "Reap package task canceled."
|
82
|
+
exit 0
|
83
|
+
end
|
84
|
+
end
|
85
|
+
package_dir_path = "#{@dir}/#{@package_name}"
|
86
|
+
package_files = FileList.new
|
87
|
+
package_files.include(*@include)
|
88
|
+
package_files.exclude(*@exclude) if @exclude and not @exclude.empty?
|
89
|
+
FileUtils.mkdir_p @dir #rescue nil
|
90
|
+
package_files.each do |fn|
|
91
|
+
f = File.join(package_dir_path, fn)
|
92
|
+
fdir = File.dirname(f)
|
93
|
+
FileUtils.mkdir_p(fdir) if not File.exist?(fdir)
|
94
|
+
if File.directory?(fn)
|
95
|
+
FileUtils.mkdir_p(f)
|
96
|
+
else
|
97
|
+
FileUtils.rm_f(f)
|
98
|
+
FileUtils.safe_ln(fn, f)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# create standard package files
|
103
|
+
FileUtils.chdir(@dir) do
|
104
|
+
# tar bzip2 for unix
|
105
|
+
if @bzip2
|
106
|
+
puts "\nReap is shelling out work to tar and bzip2..."
|
107
|
+
sh %{tar --bzip2 -cvf #{@package_name}.tbz #{@package_name}}
|
108
|
+
end
|
109
|
+
# tar gzip for unix
|
110
|
+
if @gzip
|
111
|
+
puts "\nReap is shelling out work to tar and gzip..."
|
112
|
+
sh %{tar --gzip -cvf #{@package_name}.tgz #{@package_name}}
|
113
|
+
end
|
114
|
+
# zip for windows
|
115
|
+
if @zip
|
116
|
+
puts "\nReap is shelling out work to zip..."
|
117
|
+
sh %{zip -r #{@package_name}.zip #{@package_name}}
|
118
|
+
end
|
119
|
+
puts
|
120
|
+
end
|
121
|
+
|
122
|
+
# create gem package
|
123
|
+
run_gem if defined?(Gem) and @gem
|
124
|
+
|
125
|
+
return true
|
126
|
+
end
|
127
|
+
|
128
|
+
def run_gem
|
129
|
+
spec = Gem::Specification.new { |s|
|
130
|
+
s.name = @name
|
131
|
+
s.version = @version
|
132
|
+
@gem_dependencies.each{ |d,v|
|
133
|
+
if v
|
134
|
+
s.add_dependency(d, v)
|
135
|
+
else
|
136
|
+
s.add_dependency(d)
|
137
|
+
end
|
138
|
+
}
|
139
|
+
s.platform = @gem_platform
|
140
|
+
s.summary = @summary
|
141
|
+
s.requirements = @requirements
|
142
|
+
|
143
|
+
# s.files = Dir.glob("lib/**/*").delete_if {|item| item.include?("CVS")}
|
144
|
+
# s.files.concat Dir.glob("bin/**/*").delete_if {|item| item.include?("CVS")}
|
145
|
+
package_files = FileList.new
|
146
|
+
package_files.include(*@include)
|
147
|
+
package_files.exclude(*@exclude) if @exclude and not @exclude.empty?
|
148
|
+
s.files = package_files.to_a
|
149
|
+
|
150
|
+
s.require_path = 'lib'
|
151
|
+
s.autorequire = @gem_autorequire if @gem_autorequire
|
152
|
+
s.author = @author
|
153
|
+
s.email = @email
|
154
|
+
s.rubyforge_project = @project
|
155
|
+
s.homepage = @homepage
|
156
|
+
s.executables = @executables
|
157
|
+
s.bindir = "bin"
|
158
|
+
}
|
159
|
+
puts "Reap is shelling out work to the Gem Package Manager..."
|
160
|
+
Gem.manage_gems
|
161
|
+
Gem::Builder.new(spec).build
|
162
|
+
sh %{mv ./*.gem #{@dir}/}
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'reap/task'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Publish Task
|
5
|
+
#
|
6
|
+
class Reap::PublishTask < Reap::Task
|
7
|
+
|
8
|
+
section_name :publish
|
9
|
+
|
10
|
+
attr_accessor :host, :type, :dir, :project, :username
|
11
|
+
|
12
|
+
def init
|
13
|
+
@host = (section['host'] || 'rubyforge').to_s.downcase
|
14
|
+
@type = (section['type'] || 'www').to_s.downcase
|
15
|
+
#@command = section['command']
|
16
|
+
@dir = section['dir']
|
17
|
+
#@exclude = section['exclude']
|
18
|
+
@project = section['project'] || master['rubyforge']['project'] || master['name']
|
19
|
+
@username = section['username'] || master['rubyforge']['username']
|
20
|
+
end
|
21
|
+
|
22
|
+
def define
|
23
|
+
desc "publish documents to the web *"
|
24
|
+
task :publish do
|
25
|
+
run_publish
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_publish
|
30
|
+
cmd = ''; skip = false
|
31
|
+
|
32
|
+
case @host
|
33
|
+
when 'rubyforge'
|
34
|
+
case @type
|
35
|
+
when 'www', 'web'
|
36
|
+
cmd = %{scp -r #{@dir}/* #{@username}@rubyforge.org:/var/www/gforge-projects/#{@project}/}
|
37
|
+
else
|
38
|
+
puts %{Unrecognized publishing type '#{@type}' for host '#{@host}'. Skipped.}
|
39
|
+
skip = true
|
40
|
+
end
|
41
|
+
else
|
42
|
+
puts %{Unrecognized publishing host '#{@host}'. Skipped.}
|
43
|
+
skip = true
|
44
|
+
end
|
45
|
+
|
46
|
+
unless skip
|
47
|
+
puts "Reap is shelling out publishing work..."
|
48
|
+
puts cmd
|
49
|
+
sh(cmd) unless $PRETEND
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'reap/task'
|
2
|
+
|
3
|
+
#
|
4
|
+
# RDoc Task
|
5
|
+
#
|
6
|
+
class Reap::RDocTask < Reap::Task
|
7
|
+
|
8
|
+
section_name :rdoc
|
9
|
+
|
10
|
+
attr_accessor :dir, :main, :title, :template, :include, :exclude, :options
|
11
|
+
|
12
|
+
def init
|
13
|
+
@dir = section["dir"] || 'doc'
|
14
|
+
@main = section["main"] || 'README'
|
15
|
+
@title = section["title"] || master["title"]
|
16
|
+
@template = section["template"] || 'html'
|
17
|
+
@include = section["include"] || ['lib/**/*']
|
18
|
+
@exclude = section["exclude"] || []
|
19
|
+
@options = section["options"] || []
|
20
|
+
end
|
21
|
+
|
22
|
+
def define
|
23
|
+
desc "generate RDocs (in #{@dir}) *"
|
24
|
+
task :rdoc do
|
25
|
+
run_rdoc
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def run_rdoc
|
32
|
+
if !File.exists?(@main) or File.directory?(@main)
|
33
|
+
warn "Specified RDoc Main file #{@main} not found. Ignored."
|
34
|
+
@main = nil
|
35
|
+
end
|
36
|
+
rdoc_dir = File.expand_path(@dir)
|
37
|
+
if FileTest.directory?(@dir)
|
38
|
+
print "Directory '#{@dir}' already exists. Clobber? [y/N] "
|
39
|
+
until inp = $stdin.gets[0,1] ; sleep 1 ; end ; puts
|
40
|
+
if (inp || 'y').downcase == 'y'
|
41
|
+
puts "Removing old directory '#{rdoc_dir}'..."
|
42
|
+
#FileUtils.mkdir_p(".trash") unless FileTest.directory?(".trash")
|
43
|
+
#trashdir = ".trash/#{File.basename(@dir)}"
|
44
|
+
#FileUtils.rm_r(trashdir) if FileTest.exists?(trashdir)
|
45
|
+
#FileUtils.mv(@dir, trashdir)
|
46
|
+
FileUtils.rm_r(@dir)
|
47
|
+
else
|
48
|
+
puts "Reap rdoc task canceled."
|
49
|
+
return nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
rdoc_target = "#{rdoc_dir}/index.html"
|
53
|
+
# rdoc files
|
54
|
+
rdoc_files = FileList.new
|
55
|
+
rdoc_files.include(*@include)
|
56
|
+
rdoc_files.exclude(*@exclude)
|
57
|
+
rdoc_files = '"' << rdoc_files.join('" "') << '"'
|
58
|
+
# build options string
|
59
|
+
build = @options.dup
|
60
|
+
build << "--main '#{@main}'" if @main
|
61
|
+
build << "--title '#{@title}'" if @title
|
62
|
+
build << "-T '#{@template}'" if @template
|
63
|
+
rdoc_opts = build.join(' ')
|
64
|
+
# do it!
|
65
|
+
puts "Reap is shelling work out to RDoc..."
|
66
|
+
puts %{rdoc -o #{@dir} #{rdoc_opts}}
|
67
|
+
sh %{rdoc -o #{rdoc_dir} #{rdoc_opts} #{rdoc_files}}
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'reap/template-task'
|
2
|
+
require 'reap/chmod-task'
|
3
|
+
require 'reap/test-task'
|
4
|
+
require 'reap/rdoc-task'
|
5
|
+
require 'reap/announce-task'
|
6
|
+
require 'reap/package-task'
|
7
|
+
require 'reap/publish-task'
|
8
|
+
|
9
|
+
Reap::TemplateTask.new
|
10
|
+
Reap::ChmodTask.new
|
11
|
+
Reap::TestTask.new
|
12
|
+
Reap::RDocTask.new
|
13
|
+
Reap::AnnounceTask.new
|
14
|
+
Reap::PackageTask.new
|
15
|
+
Reap::PublishTask.new
|
data/lib/reap/task.rb
CHANGED
@@ -1,106 +1,166 @@
|
|
1
1
|
|
2
2
|
require 'rbconfig'
|
3
|
+
require 'yaml'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
require 'rake'
|
7
|
+
require 'rake/tasklib'
|
8
|
+
|
9
|
+
#require 'mega/filelist'
|
10
|
+
require 'nano/hash/traverse'
|
11
|
+
|
12
|
+
module Reap ; end
|
13
|
+
|
14
|
+
# Base class for reap tasks.
|
15
|
+
#
|
16
|
+
# When creating a specifc task, subclass this one and create two class-level
|
17
|
+
# methods #task and #desc. #task will return the name of the task and
|
18
|
+
# #desc a description of the task. Then create an instance method called
|
19
|
+
# #setup to do any initial preping. Usually that means assigning
|
20
|
+
# some instance vars from the Reapfile configutration. You can use
|
21
|
+
# section[<name>] for settings from the task's particular section (as
|
22
|
+
# determined by self.task method above) and/or use master[<name>]
|
23
|
+
# for top-level settings. Finally write a #run method that preforms the
|
24
|
+
# actual task.
|
25
|
+
#
|
26
|
+
# Here's an oh so simple example:
|
27
|
+
#
|
28
|
+
# class MyTask < Task
|
29
|
+
# def self.task ; 'mytask' ; end
|
30
|
+
# def self.desc ; 'This is my first custom task.' ; end
|
31
|
+
#
|
32
|
+
# def setup
|
33
|
+
# @message = section['message'] || master['default'] || 'None Found!'
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# def run
|
37
|
+
# puts @message
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# This corresponding settings in the Reapfile will then be:
|
42
|
+
#
|
43
|
+
# default: Default text, if any.
|
44
|
+
#
|
45
|
+
# mytask:
|
46
|
+
# message: Message text, if any.
|
47
|
+
#
|
48
|
+
# Reap automatically handles multiple task runs if an array is provided
|
49
|
+
# under the task section instead of a single mapping. For example:
|
50
|
+
#
|
51
|
+
# mytask:
|
52
|
+
# -
|
53
|
+
# message: First Run.
|
54
|
+
# -
|
55
|
+
# message: Second Run.
|
56
|
+
#
|
57
|
+
class Reap::Task < Rake::TaskLib
|
58
|
+
|
59
|
+
RUBY = Config::CONFIG['ruby_install_name']
|
60
|
+
|
61
|
+
DEFAULT_INCLUDE = [ '[A-Z]*', 'setup.rb', 'lib/**/*', 'bin/**/*', 'data/**/*',
|
62
|
+
'doc/**/*', 'rdoc/**/*', 'test/**/*', 'bench/**/*',
|
63
|
+
'demo/**/*', 'samples/**/*', 'examples/**/*' ]
|
64
|
+
|
65
|
+
MUST_EXCLUDE = [ 'InstalledFiles', '**/CVS/**/*', '**/*~' ]
|
66
|
+
|
67
|
+
|
68
|
+
def initialize #:yield:
|
69
|
+
load_config
|
70
|
+
init
|
71
|
+
yield( self ) if block_given?
|
72
|
+
define
|
73
|
+
end
|
3
74
|
|
4
|
-
|
75
|
+
def init
|
76
|
+
raise "not implemented"
|
77
|
+
end
|
5
78
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# methods #task and #desc. #task will return the name of the task and
|
10
|
-
# #desc a description of the task. Then create an instance method called
|
11
|
-
# #setup to do any initial preping. Usually that means assigning
|
12
|
-
# some instance vars from the Reapfile configutration. You can use
|
13
|
-
# section[<name>] for settings from the task's particular section (as
|
14
|
-
# determined by self.task method above) and/or use master[<name>]
|
15
|
-
# for top-level settings. Finally write a #run method that preforms the
|
16
|
-
# actual task.
|
17
|
-
#
|
18
|
-
# Here's an oh so simple example:
|
19
|
-
#
|
20
|
-
# class MyTask < Task
|
21
|
-
# def self.task ; 'mytask' ; end
|
22
|
-
# def self.desc ; 'This is my first custom task.' ; end
|
23
|
-
#
|
24
|
-
# def setup
|
25
|
-
# @message = section['message'] || master['default'] || 'None Found!'
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# def run
|
29
|
-
# puts @message
|
30
|
-
# end
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# This corresponding settings in the Reapfile will then be:
|
34
|
-
#
|
35
|
-
# default: Default text, if any.
|
36
|
-
#
|
37
|
-
# mytask:
|
38
|
-
# message: Message text, if any.
|
39
|
-
#
|
40
|
-
# Reap automatically handles multiple task runs if an array is provided
|
41
|
-
# under the task section instead of a single mapping. For example:
|
42
|
-
#
|
43
|
-
# mytask:
|
44
|
-
# -
|
45
|
-
# message: First Run.
|
46
|
-
# -
|
47
|
-
# message: Second Run.
|
48
|
-
#
|
49
|
-
class Task
|
79
|
+
def define
|
80
|
+
raise "not implemented"
|
81
|
+
end
|
50
82
|
|
51
|
-
|
83
|
+
attr_reader :config
|
84
|
+
|
85
|
+
def load_config( config_file=nil )
|
86
|
+
config_file ||= 'Reapfile'
|
87
|
+
if File.file?( config_file )
|
88
|
+
# load config file
|
89
|
+
@config = ::YAML.load( File.open( config_file ) ).traverse{ |k,v| [k.downcase, v] }
|
90
|
+
# required main parameters
|
91
|
+
raise "TITLE is a required configuration field" unless @config['title']
|
92
|
+
raise "NAME is a required configuration field" unless @config['name']
|
93
|
+
raise "VERSION is a required configuration field" unless @config['version']
|
94
|
+
else
|
95
|
+
@config = {}
|
96
|
+
end
|
97
|
+
end
|
52
98
|
|
53
|
-
|
54
|
-
|
55
|
-
|
99
|
+
def master ; @config ; end
|
100
|
+
|
101
|
+
def section
|
102
|
+
sect = @config[self.class.section_name] || {}
|
103
|
+
end
|
56
104
|
|
57
|
-
|
105
|
+
# Class Methods
|
58
106
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
def registry ; @task_registry ||= [] ; end
|
64
|
-
def tasks ; @task ||= registry.collect { |t| t.task } ; end
|
107
|
+
class << self
|
108
|
+
def section_name(n=nil)
|
109
|
+
@sname = n.to_s if n
|
110
|
+
@sname
|
65
111
|
end
|
112
|
+
end
|
66
113
|
|
67
|
-
attr_reader :master, :section
|
68
114
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
115
|
+
=begin
|
116
|
+
class << self
|
117
|
+
def inherited( klass )
|
118
|
+
(@task_registry ||= []) << klass
|
73
119
|
end
|
120
|
+
def registry ; @task_registry ||= [] ; end
|
121
|
+
def tasks ; @task ||= registry.collect { |t| t.task_name } ; end
|
122
|
+
|
123
|
+
def task_name(n=nil) ; @tname = n.to_sym if n ; @tname ; end
|
124
|
+
def task_desc(d=nil) ; @tdesc = d.to_s if d ; @tdesc ; end
|
125
|
+
end
|
126
|
+
|
127
|
+
attr_reader :master, :section
|
128
|
+
|
129
|
+
def initialize( master_config, section_config )
|
130
|
+
@master = master_config
|
131
|
+
@section = section_config
|
132
|
+
setup if respond_to?(:setup)
|
133
|
+
end
|
134
|
+
|
135
|
+
def [](x) ; @section[x] ; end
|
74
136
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
unless options[:noop]
|
86
|
-
system(cmd) or fail "Command Failed: [#{cmd}]"
|
87
|
-
end
|
137
|
+
# Run the system command +cmd+.
|
138
|
+
#
|
139
|
+
# Example:
|
140
|
+
# sh %{ls -ltr}
|
141
|
+
#
|
142
|
+
def sh(cmd, options={})
|
143
|
+
FileUtils.send( :fu_check_options, options, :noop, :verbose )
|
144
|
+
FileUtils.send( :fu_output_message, cmd ) if options[:verbose]
|
145
|
+
unless options[:noop]
|
146
|
+
system(cmd) or fail "Command Failed: [#{cmd}]"
|
88
147
|
end
|
148
|
+
end
|
89
149
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
end
|
101
|
-
puts "#{RUBY} #{args.join(' ')}" if $DEBUG
|
102
|
-
sh "#{RUBY} #{args.join(' ')}", options
|
150
|
+
# Run a Ruby interpreter with the given arguments.
|
151
|
+
#
|
152
|
+
# Example:
|
153
|
+
# ruby %{-pe '$_.upcase!' <README}
|
154
|
+
#
|
155
|
+
def ruby(*args)
|
156
|
+
if Hash === args.last
|
157
|
+
options = args.pop
|
158
|
+
else
|
159
|
+
options = {}
|
103
160
|
end
|
161
|
+
puts "#{RUBY} #{args.join(' ')}" if $DEBUG
|
162
|
+
sh "#{RUBY} #{args.join(' ')}", options
|
163
|
+
end
|
104
164
|
|
105
165
|
# # Attempt to do a normal file link, but fall back
|
106
166
|
# # to a copy if the link fails.
|
@@ -117,36 +177,35 @@ module Reap
|
|
117
177
|
# end
|
118
178
|
# end
|
119
179
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
# def rakefile
|
126
|
-
# s = ''
|
127
|
-
# rf = File.join(locate, 'packmule', 'packmule.rake')
|
128
|
-
# File.open( rf ) { |f| s << f.gets(nil) }
|
129
|
-
# s
|
130
|
-
# end
|
131
|
-
#
|
132
|
-
# def yamlform
|
133
|
-
# s = ''
|
134
|
-
# yf = File.join(locate, 'packmule', 'packmule.yaml')
|
135
|
-
# File.open( yf ) { |f| s << f.gets(nil) }
|
136
|
-
# s
|
137
|
-
# end
|
138
|
-
|
139
|
-
#def value( key, *alt_masters )
|
140
|
-
# return section[key] if section.key?( key )
|
141
|
-
# alt_masters.each do |path|
|
142
|
-
# parr = path.split(':').collect { |e| e.downcase }
|
143
|
-
# conf = @config
|
144
|
-
# parr.each { |e| conf = conf[e] }
|
145
|
-
# return conf if conf
|
146
|
-
# end
|
147
|
-
# nil
|
148
|
-
#end
|
149
|
-
|
180
|
+
# Returns the full package name which combines package name and version.
|
181
|
+
def package_name
|
182
|
+
@config['name'] + '-' + ( @config['version'] || '0.0.1' )
|
150
183
|
end
|
151
184
|
|
152
|
-
|
185
|
+
# def rakefile
|
186
|
+
# s = ''
|
187
|
+
# rf = File.join(locate, 'packmule', 'packmule.rake')
|
188
|
+
# File.open( rf ) { |f| s << f.gets(nil) }
|
189
|
+
# s
|
190
|
+
# end
|
191
|
+
#
|
192
|
+
# def yamlform
|
193
|
+
# s = ''
|
194
|
+
# yf = File.join(locate, 'packmule', 'packmule.yaml')
|
195
|
+
# File.open( yf ) { |f| s << f.gets(nil) }
|
196
|
+
# s
|
197
|
+
# end
|
198
|
+
|
199
|
+
#def value( key, *alt_masters )
|
200
|
+
# return section[key] if section.key?( key )
|
201
|
+
# alt_masters.each do |path|
|
202
|
+
# parr = path.split(':').collect { |e| e.downcase }
|
203
|
+
# conf = @config
|
204
|
+
# parr.each { |e| conf = conf[e] }
|
205
|
+
# return conf if conf
|
206
|
+
# end
|
207
|
+
# nil
|
208
|
+
#end
|
209
|
+
=end
|
210
|
+
|
211
|
+
end #class Reap::Task
|