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
@@ -0,0 +1,194 @@
|
|
1
|
+
module Reap
|
2
|
+
|
3
|
+
class Manager
|
4
|
+
|
5
|
+
# DEFAULT['rdoc'] = {
|
6
|
+
# 'template' => 'html',
|
7
|
+
# 'output' => 'doc/rdoc',
|
8
|
+
# 'main' => 'README',
|
9
|
+
# 'inline' => true,
|
10
|
+
# 'merge' => true,
|
11
|
+
# 'exclude' => [],
|
12
|
+
# 'include' => ['lib', '[A-Z]*'],
|
13
|
+
# 'adfile' => 'doc/ads/rdoc.html',
|
14
|
+
# 'targets' => nil
|
15
|
+
# }
|
16
|
+
|
17
|
+
# Generate rdocs.
|
18
|
+
#
|
19
|
+
# Generate Rdoc documentation. Settings are the
|
20
|
+
# same as the rdoc command's option, with two
|
21
|
+
# exceptions: +inline+ for +inline-source+ and
|
22
|
+
# +output+ for +op+.
|
23
|
+
|
24
|
+
def rdoc(options=nil)
|
25
|
+
options = configure_options(options, 'doc-rdoc', 'rdoc', 'doc')
|
26
|
+
#options = DEFAULT['rdoc'].merge(options)
|
27
|
+
|
28
|
+
options['title'] ||= metadata.title
|
29
|
+
|
30
|
+
targets = options.delete('targets') || {'' => options}
|
31
|
+
output = options['output']
|
32
|
+
adfile = options['adfile']
|
33
|
+
|
34
|
+
adfile = [adfile].flatten.find do |f|
|
35
|
+
File.exist?(f)
|
36
|
+
end
|
37
|
+
|
38
|
+
targets.each do |subdir, target|
|
39
|
+
target = options.merge(target)
|
40
|
+
|
41
|
+
target_solo = target['solo']
|
42
|
+
target_main = Dir.glob(target['main'].to_s, File::FNM_CASEFOLD).first
|
43
|
+
|
44
|
+
#target_main = File.expand_path(target_main) if target_main
|
45
|
+
#target_output = File.expand_path(File.join(output, subdir))
|
46
|
+
target_output = File.join(output, subdir)
|
47
|
+
|
48
|
+
cmdopts = {}
|
49
|
+
#cmdopts['op'] = target_output
|
50
|
+
cmdopts['main'] = target_main if target_main
|
51
|
+
cmdopts['template'] = target['template']
|
52
|
+
cmdopts['merge'] = target['merge']
|
53
|
+
cmdopts['inline-source'] = target['inline']
|
54
|
+
cmdopts['exclude'] = target['exclude']
|
55
|
+
|
56
|
+
files = target['include']
|
57
|
+
folder = target['chdir'] || '.'
|
58
|
+
|
59
|
+
#puts "cd #{folder}" if dryrun? # TODO: Shouldn't chdir do this automatically?
|
60
|
+
#chdir(folder) do
|
61
|
+
if target_solo
|
62
|
+
input_files = files.collect{ |i| multiglob_r(i) }.flatten.reject{ |f| dir?(f) }
|
63
|
+
input_files.each do |input_file|
|
64
|
+
out = File.join(target_output, File.basename(input_file).chomp(File.extname(input_file)))
|
65
|
+
rdoc_target(out, input_file, cmdopts)
|
66
|
+
rdoc_insert_ads(target_output, adfile)
|
67
|
+
end
|
68
|
+
else
|
69
|
+
input_files = files.collect{ |i| dir?(i) ? File.join(i,'**','*') : i }
|
70
|
+
rdoc_target(target_output, input_files, cmdopts)
|
71
|
+
rdoc_insert_ads(target_output, adfile)
|
72
|
+
end
|
73
|
+
#end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Remove rdocs products.
|
78
|
+
|
79
|
+
def clobber_rdoc(options=nil)
|
80
|
+
options = configure_options(options, 'doc-rdoc', 'rdoc')
|
81
|
+
|
82
|
+
output = options['output']
|
83
|
+
|
84
|
+
if File.directory?(output)
|
85
|
+
rm_r(output)
|
86
|
+
puts "Removed #{output}" unless dryrun?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
#
|
93
|
+
|
94
|
+
def rdoc_target(output, input, rdocopt={})
|
95
|
+
if out_of_date?(output, *input) or force?
|
96
|
+
rm_r(output) if exist?(output) and safe?(output) # remove old rdocs
|
97
|
+
rdocopt['op'] = output
|
98
|
+
sh "rdoc " + [input, rdocopt].to_console
|
99
|
+
else
|
100
|
+
puts "RDocs are current -- #{output}"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Insert an ad if available.
|
105
|
+
|
106
|
+
def rdoc_insert_ads(site, adfile)
|
107
|
+
return if dryrun?
|
108
|
+
return unless adfile && File.file?(adfile)
|
109
|
+
adtext = File.read(adfile)
|
110
|
+
#puts
|
111
|
+
dirs = Dir.glob(File.join(site,'*/'))
|
112
|
+
dirs.each do |dir|
|
113
|
+
files = Dir.glob(File.join(dir, '**/*.html'))
|
114
|
+
files.each do |file|
|
115
|
+
html = file_read(file)
|
116
|
+
bodi = html.index('<body>')
|
117
|
+
html[bodi + 7] = "\n" + adtext
|
118
|
+
#print "Augmenting #{file}..."
|
119
|
+
file_write(file, html) unless dryrun?
|
120
|
+
#puts "[done]"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
public
|
126
|
+
|
127
|
+
DEFAULT['ri'] = {
|
128
|
+
'output' => 'ri',
|
129
|
+
'exclude' => [],
|
130
|
+
'include' => ['lib']
|
131
|
+
}
|
132
|
+
|
133
|
+
# generate local ri docs
|
134
|
+
#
|
135
|
+
# Generate RI documentation. This utilizes
|
136
|
+
# rdoc to produce the appropriate files.
|
137
|
+
|
138
|
+
def ridoc(options=nil)
|
139
|
+
options = configure_options(options, 'doc-ri', 'ri')
|
140
|
+
options = DEFAULT['ri'].merge(options)
|
141
|
+
|
142
|
+
cmdopts = {}
|
143
|
+
cmdopts['op'] = options['output']
|
144
|
+
cmdopts['exclude'] = options['exclude']
|
145
|
+
|
146
|
+
output = options['output']
|
147
|
+
files = options['include'] # || ['lib', '[A-Z]*']
|
148
|
+
|
149
|
+
input = files.collect do |i|
|
150
|
+
dir?(i) ? File.join(i,'**','*') : i
|
151
|
+
end
|
152
|
+
|
153
|
+
if out_of_date?(output, *input) or force?
|
154
|
+
rm_r(output) if exist?(output) and safe?(output) # remove old ridocs
|
155
|
+
|
156
|
+
#input = input.collect{ |i| glob(i) }.flatten
|
157
|
+
vector = [input, cmdopts]
|
158
|
+
sh "rdoc --ri #{vector.to_console}"
|
159
|
+
else
|
160
|
+
puts "RI Docs are current."
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# Remove ri products.
|
165
|
+
|
166
|
+
def clobber_ridoc(options=nil)
|
167
|
+
options = configure_options(options, 'doc-ri', 'ri')
|
168
|
+
|
169
|
+
output = options['output']
|
170
|
+
|
171
|
+
if File.directory?(output)
|
172
|
+
rm_r(output)
|
173
|
+
puts "Removed #{output}" unless dryrun?
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
private
|
178
|
+
|
179
|
+
# # Shell out to rdoc to create ri docs.
|
180
|
+
#
|
181
|
+
# def ridoc_shell(files, config)
|
182
|
+
# output = config['op']
|
183
|
+
# input = config.delete('include')
|
184
|
+
#
|
185
|
+
# # Check for 'doc' directory.
|
186
|
+
# # (Helps to ensure we're in the right place.)
|
187
|
+
# #dir!(File.dirname(site))
|
188
|
+
#
|
189
|
+
# end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'reap/manager/rubyforge'
|
2
|
+
|
3
|
+
module Reap
|
4
|
+
|
5
|
+
class Manager
|
6
|
+
|
7
|
+
# Update VERSION stamp file.
|
8
|
+
#
|
9
|
+
# TODO: Should we also update a lib/version.rb file?
|
10
|
+
|
11
|
+
def stamp(options={})
|
12
|
+
options = configure_options(options, 'stamp')
|
13
|
+
|
14
|
+
meta = File.directory?('meta')
|
15
|
+
|
16
|
+
version = options['version'] || metadata.version || '0.0.0'
|
17
|
+
status = options['status'] || metadata.status || 'alpha'
|
18
|
+
|
19
|
+
abort "Invalid version -- #{version}" unless /^[0-9]/ =~ version
|
20
|
+
|
21
|
+
file = glob('{,meta/}version{,.txt}', File::FNM_CASEFOLD).first
|
22
|
+
file = (meta ? 'meta/VERSION' : 'VERSION') unless file
|
23
|
+
|
24
|
+
text = "#{version} #{status} (#{Time.now.strftime('%Y-%m-%d')})"
|
25
|
+
|
26
|
+
if File.exist?(file)
|
27
|
+
old_text = File.read(file).strip
|
28
|
+
return if text == old_text
|
29
|
+
end
|
30
|
+
|
31
|
+
if dryrun?
|
32
|
+
puts file + ":"
|
33
|
+
puts text
|
34
|
+
else
|
35
|
+
File.open(file, 'w'){|f| f << text}
|
36
|
+
puts "#{file} updated."
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODO: Stamp .roll if roll file exists.
|
40
|
+
# should we read current .roll file and use as defaults?
|
41
|
+
if File.exist?('.roll')
|
42
|
+
str = []
|
43
|
+
str << "name = #{metadata.name}"
|
44
|
+
str << "version = #{metadata.version}"
|
45
|
+
str << "status = #{metadata.status}"
|
46
|
+
str << "date = #{metadata.date}"
|
47
|
+
str << "default = #{metadata.default}"
|
48
|
+
str << "libpath = #{metadata.libpath}"
|
49
|
+
# File.open('.roll','w'){ |f| f << str.join("\n") }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Clean, stamp if need be and package.
|
54
|
+
|
55
|
+
def prepare(options={})
|
56
|
+
clean
|
57
|
+
make_distclean if compiles?
|
58
|
+
stamp(options)
|
59
|
+
package(options)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Prepare and release to rubyforge.
|
63
|
+
|
64
|
+
def release(options={})
|
65
|
+
prepare(options)
|
66
|
+
rubyforge_release(options)
|
67
|
+
#announce(options)
|
68
|
+
puts "\nBe sure to tag and announce this release if need be."
|
69
|
+
end
|
70
|
+
|
71
|
+
#def release(options)
|
72
|
+
#name, version = release.name, release.version
|
73
|
+
#sh "icli rubyforge release --version=#{version}"
|
74
|
+
#end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'reap/systems/rubyforge'
|
2
|
+
|
3
|
+
module Reap
|
4
|
+
|
5
|
+
class Manager
|
6
|
+
|
7
|
+
#DEFAULT['rubyforge'] = {
|
8
|
+
# 'changelog' => 'CHANGES',
|
9
|
+
# 'notelog' => 'NOTES'
|
10
|
+
#}
|
11
|
+
|
12
|
+
# Release packages to rubyforge.
|
13
|
+
|
14
|
+
def rubyforge_release(options)
|
15
|
+
options = configure_options(options, 'release', 'rubyforge')
|
16
|
+
|
17
|
+
rubyforge_options = {}
|
18
|
+
rubyforge_options[:dryrun] = dryrun?
|
19
|
+
rubyforge_options[:trace] = trace?
|
20
|
+
rubyforge_options[:project] = options.delete('project') || metadata.project
|
21
|
+
rubyforge_options[:username] = options.delete('username') || ENV['RUBYFORGE_USERNAME']
|
22
|
+
rubyforge_options[:group_id] = options.delete('group')
|
23
|
+
|
24
|
+
host = Rubyforge.new(rubyforge_options)
|
25
|
+
|
26
|
+
options['version'] = metadata.version
|
27
|
+
options['store'] = 'pkg'
|
28
|
+
|
29
|
+
changelog = options['changelog'] #|| DEFAULT['release']['changelog'] || DEFAULT['rubyforge']['changelog']
|
30
|
+
notelog = options['notelog'] #|| DEFAULT['release']['notelog'] || DEFAULT['rubyforge']['notelog']
|
31
|
+
|
32
|
+
changelog = Dir.glob(changelog.to_s, File::FNM_CASEFOLD).first
|
33
|
+
notelog = Dir.glob(notelog.to_s, File::FNM_CASEFOLD).first
|
34
|
+
|
35
|
+
options['changelog'] = changelog if File.exist?(changelog)
|
36
|
+
options['notelog'] = notelog if File.exist?(notelog)
|
37
|
+
|
38
|
+
host.release(options)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,138 @@
|
|
1
|
+
module Reap
|
2
|
+
|
3
|
+
class Manager
|
4
|
+
|
5
|
+
def scaffold(options)
|
6
|
+
requests = options['arguments']
|
7
|
+
|
8
|
+
if requests
|
9
|
+
requests.each do |f|
|
10
|
+
case f
|
11
|
+
#when /^(meta\/)?project(info)?(.yaml|.yml)?$/i
|
12
|
+
# scaffold_projectfile(f)
|
13
|
+
when /^rake(file)?$/i
|
14
|
+
scaffold_rakefile(f)
|
15
|
+
when /^setup[.]rb$/
|
16
|
+
scaffold_setup_rb(f)
|
17
|
+
when /^(task|script)s?\//i
|
18
|
+
scaffold_task(f)
|
19
|
+
when /^(task|script)(s)?$/
|
20
|
+
scaffold_tasks(f)
|
21
|
+
else
|
22
|
+
raise "Unknown scaffolding."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
else
|
26
|
+
scaffold_skeleton(options=nil)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Add project file template to project.
|
31
|
+
#
|
32
|
+
# FIXME: This doesn't yet work b/c reap doesn't work unless
|
33
|
+
# a project file is already in place.
|
34
|
+
|
35
|
+
#def scaffold_projectfile(fname)
|
36
|
+
# from = File.join(data_dir, 'metaset', 'meta', 'project.yaml')
|
37
|
+
# cp(from, fname) unless File.exist?(fname)
|
38
|
+
#end
|
39
|
+
|
40
|
+
# Add tasks in Rakefile form to project.
|
41
|
+
|
42
|
+
def scaffold_rakefile(fname)
|
43
|
+
from = File.join(data_dir, 'buildset', 'rake', 'Rakefile')
|
44
|
+
cp(from, fname) unless File.exist?(fname)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
|
49
|
+
def scaffold_setup_rb(fname)
|
50
|
+
from = File.join(data_dir, 'buidset', 'rake', 'setup.rb')
|
51
|
+
cp(from, fname) unless File.exist?(fname)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Add a user tasks to the project.
|
55
|
+
|
56
|
+
def scaffold_task(fname)
|
57
|
+
from = File.join(data_dir, 'buildset', 'tasks', 'task', File.basename(fname))
|
58
|
+
cp(from, fname) unless File.exist?(fname)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Add all user tasks to the project.
|
62
|
+
|
63
|
+
def scaffold_tasks(fname)
|
64
|
+
dir = File.join(data_dir, 'buildset', 'tasks', 'task')
|
65
|
+
cp_r(dir, fname)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Create a project skeleton.
|
69
|
+
#
|
70
|
+
# TODO: Improve scaffolding. Make more intelligent.
|
71
|
+
|
72
|
+
def scaffold_skeleton(options=nil)
|
73
|
+
options = (options || {}).rekey(:to_s)
|
74
|
+
|
75
|
+
files = glob('**/*') - glob('meta/**/*') - ['.reap']
|
76
|
+
|
77
|
+
unless files.empty?
|
78
|
+
ans = ask("Directory isn't empty. Are you sure you want to add scaffolding?", 'yN')
|
79
|
+
case ans.downcase
|
80
|
+
when 'y', 'yes'
|
81
|
+
else
|
82
|
+
abort "Scaffolding aborted."
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# if options['svn']
|
87
|
+
# if glob('**/*').empty?
|
88
|
+
# mkdir_p('trunk')
|
89
|
+
# mkdir_p('branches')
|
90
|
+
# mkdir_p('tags')
|
91
|
+
# chdir('trunk')
|
92
|
+
# else
|
93
|
+
# abort "Can't create a svn repo unless directory is empty."
|
94
|
+
# end
|
95
|
+
# end
|
96
|
+
|
97
|
+
paths = nil
|
98
|
+
dir = File.join(data_dir, 'base')
|
99
|
+
chdir(dir){ paths = Dir['**/*'] }
|
100
|
+
|
101
|
+
dirs = paths.select{ |f| File.directory?(File.join(dir, f)) }
|
102
|
+
files = (paths - dirs).reject{ |f| /[.]svn/ =~ f }
|
103
|
+
|
104
|
+
dirs.each do |dname|
|
105
|
+
if File.exist?(dname) and !File.directory?(dname)
|
106
|
+
abort "Directory to be created clashes with a prexistent file -- #{dname}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
dirs.each do |dname|
|
111
|
+
mkdir_p(dname) unless File.exist?(dname)
|
112
|
+
end
|
113
|
+
|
114
|
+
files.each do |fname|
|
115
|
+
file = File.join(dir, fname)
|
116
|
+
cp(file, fname) unless File.exist?(fname)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
# FIXME: RubyGems has a new way to do this. Use that instead and fix Rolls to use it too.
|
123
|
+
|
124
|
+
def data_dir
|
125
|
+
@datadir ||= (
|
126
|
+
if defined?(::Library) and Library['reap']
|
127
|
+
dd = Library['reap'].datadir
|
128
|
+
else
|
129
|
+
dd = File.join(Config::CONFIG['datadir'], 'reap')
|
130
|
+
end
|
131
|
+
File.join(dd, 'reap')
|
132
|
+
)
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'reap/manager/svn'
|
2
|
+
|
3
|
+
module Reap
|
4
|
+
|
5
|
+
class Manager
|
6
|
+
|
7
|
+
# Generate ChangeLog. This method routes to the
|
8
|
+
# appropriate method for the project's source
|
9
|
+
# control manager.
|
10
|
+
#
|
11
|
+
#
|
12
|
+
|
13
|
+
def scm_log(options={})
|
14
|
+
create_txtlog = (options['txtlog'] != false)
|
15
|
+
create_xmllog = (options['xmllog'] != false)
|
16
|
+
|
17
|
+
xmlout = options['xmloutput'] || 'doc/log' # TODO: How to set doc/?
|
18
|
+
|
19
|
+
if create_txtlog
|
20
|
+
txtlog = apply_naming_policy('changelog', 'txt')
|
21
|
+
txtlog = File.join('log', txtlog)
|
22
|
+
end
|
23
|
+
|
24
|
+
if create_xmllog
|
25
|
+
xmllog = apply_naming_policy('changelog', 'xml')
|
26
|
+
xmllog = File.join(xmlout, xmllog)
|
27
|
+
end
|
28
|
+
|
29
|
+
#txtlog = File.join('lib', txtlog) unless txtlog.include?('/')
|
30
|
+
#xmllog = File.join(xmldir, xmllog) unless xmllog.include?('/')
|
31
|
+
|
32
|
+
if File.directory?('.svn')
|
33
|
+
svn_log('txtlog' => txtlog, 'xmllog' => xmllog)
|
34
|
+
else
|
35
|
+
abort "Only Subversion is currently supported."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Tag current versoin of project. This method routes
|
40
|
+
# to the appropriate method for the project's source
|
41
|
+
# control manager.
|
42
|
+
|
43
|
+
def scm_tag(*args)
|
44
|
+
if File.directory?('.svn')
|
45
|
+
svn_tag(*args)
|
46
|
+
else
|
47
|
+
abort "Only Subversion is currently supported."
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Branch current version of project. This method routes
|
52
|
+
# to the appropriate method for the project's source
|
53
|
+
# control manager.
|
54
|
+
|
55
|
+
def scm_branch(*args)
|
56
|
+
if File.directory?('.svn')
|
57
|
+
svn_branch(*args)
|
58
|
+
else
|
59
|
+
abort "Only Subversion is currently supported."
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Reap
|
2
|
+
|
3
|
+
class Manager
|
4
|
+
|
5
|
+
# Install via project's install/setup script.
|
6
|
+
#
|
7
|
+
# TODO: Remove special reap options from command line.
|
8
|
+
|
9
|
+
def site_install
|
10
|
+
script = glob("setup.rb,install.rb,task/setup,task/install").first
|
11
|
+
if script
|
12
|
+
sh "#{script} #{ARGV.join(' ')}"
|
13
|
+
else
|
14
|
+
abort "Project needs an install/setup script."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# TODO: Create uninstall task.
|
19
|
+
|
20
|
+
def site_uninstall
|
21
|
+
abort "Not yet implemented."
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Reap
|
2
|
+
|
3
|
+
class Manager
|
4
|
+
|
5
|
+
# DEFAULT['spec'] = {
|
6
|
+
# 'specs' => ['spec/**/*_spec.rb', 'spec/**/spec_*.rb'],
|
7
|
+
# 'require' => [],
|
8
|
+
# 'warning' => false,
|
9
|
+
# 'command' => ['spec']
|
10
|
+
# }
|
11
|
+
|
12
|
+
# Run all specs with basic output.
|
13
|
+
#
|
14
|
+
# Options:
|
15
|
+
# specs File glob(s) of spec files. Defaults to ['spec/**/*_spec.rb', 'spec/**/spec_*.rb'].
|
16
|
+
# loadpath Paths to add $LOAD_PATH. Defaults to ['lib'].
|
17
|
+
# live Ignore loadpath, use installed libraries instead. Default is false.
|
18
|
+
# require Lib(s) to require before excuting specifications.
|
19
|
+
# warning Whether to show warnings or not. Default is false.
|
20
|
+
# command Spec command to use. Defaults to 'spec'.
|
21
|
+
# format Format of RSpec output.
|
22
|
+
# rubyopt Additional options to pass to the ruby command.
|
23
|
+
# specopt Additional commandline options for spec command.
|
24
|
+
#--
|
25
|
+
# RCOV suppot?
|
26
|
+
# ruby [ruby_opts] -Ilib -S rcov [rcov_opts] bin/spec -- examples [spec_opts]
|
27
|
+
#++
|
28
|
+
|
29
|
+
def spec(options=nil)
|
30
|
+
options = configure_options(options, 'spec')
|
31
|
+
|
32
|
+
#specs = options['specs'] || DEFAULT['spec']['specs']
|
33
|
+
#reqs = options['require'] || DEFAULT['spec']['require']
|
34
|
+
#warning = options['warning'] || DEFAULT['spec']['false']
|
35
|
+
#command = options['command'] || DEFAULT['spec']['command']
|
36
|
+
|
37
|
+
specs = options['specs']
|
38
|
+
warning = options['warning']
|
39
|
+
command = options['command'] || 'spec'
|
40
|
+
loadpath = options['loadpath'] || metadata.loadpath
|
41
|
+
format = options['format']
|
42
|
+
rubyopt = options['rubyopt']
|
43
|
+
specopt = options['specopt']
|
44
|
+
live = options['live']
|
45
|
+
|
46
|
+
specs = list_options(specs)
|
47
|
+
loadpath = list_options(loadpath)
|
48
|
+
requires = list_options(requires)
|
49
|
+
|
50
|
+
files = multiglob(*specs)
|
51
|
+
|
52
|
+
if files.empty?
|
53
|
+
puts "No specifications."
|
54
|
+
else
|
55
|
+
#RakeFileUtils.verbose(verbose) do
|
56
|
+
# ruby [ruby_opts] -Ilib bin/spec examples [spec_opts]
|
57
|
+
cmd = "ruby"
|
58
|
+
cmd << " -w" if warning
|
59
|
+
cmd << %[ -I"#{loadpath.join(':')}"] unless loadpath.empty?
|
60
|
+
cmd << %[ -r"#{requires.join(':')}"] unless requires.empty?
|
61
|
+
cmd << rubyopt #.join(" ")
|
62
|
+
cmd << " "
|
63
|
+
#rb_opts << "-S rcov" if rcov
|
64
|
+
#cmd << rcov_option_list
|
65
|
+
#cmd << %[ -o "#{rcov_dir}" ] if rcov
|
66
|
+
cmd << command
|
67
|
+
cmd << " "
|
68
|
+
#cmd << "-- " if rcov
|
69
|
+
cmd << files.join(' ')
|
70
|
+
cmd << " "
|
71
|
+
cmd << specopt #.join(' ')
|
72
|
+
cmd << " --format #{format}" if format
|
73
|
+
|
74
|
+
puts cmd if verbose?
|
75
|
+
unless system(cmd)
|
76
|
+
STDERR.puts failure_message if failure_message
|
77
|
+
raise("Command #{cmd} failed") if fail_on_error
|
78
|
+
end
|
79
|
+
#end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Run all specs with text output
|
84
|
+
|
85
|
+
def spec_doc(options=nil)
|
86
|
+
options ||= {}
|
87
|
+
options['format'] = 'specdoc'
|
88
|
+
spec(options)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|