reap 6.0.0 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ProjectInfo +102 -0
- data/data/reap/install.rb +62 -0
- data/forge/ProjectInfo +38 -0
- data/forge/ProjectInfo.rb +76 -0
- data/forge/TODO +10 -0
- data/forge/installer.rb +250 -0
- data/forge/reference/Rakefile +124 -0
- data/forge/reference/Rakefile.htm +69 -0
- data/forge/reference/aRakefile +60 -0
- data/forge/reference/compositepublisher.rb +24 -0
- data/forge/reference/ftptools.rb +139 -0
- data/forge/reference/installers/package.rb +629 -0
- data/forge/reference/installers/setup.rb +1558 -0
- data/forge/reference/license-each.rb +85 -0
- data/forge/reference/publisher.rb +75 -0
- data/forge/reference/rubyforge.rb +247 -0
- data/forge/reference/rubyforgepublisher.rb +18 -0
- data/forge/reference/sshpublisher.rb +47 -0
- data/forge/reference/suby-cvs.rb +46 -0
- data/forge/scaffold.rb +126 -0
- data/forge/unit_runner/README +6 -0
- data/forge/unit_runner/commentrunner.rb +62 -0
- data/forge/unit_runner/cunit.rb +17 -0
- data/forge/unit_runner/forkedrunner.rb +91 -0
- data/forge/unit_runner/sample.rb +16 -0
- data/lib/reap/class/extest.rb +2 -7
- data/lib/reap/class/manifest.rb +7 -11
- data/lib/reap/class/package.rb +120 -25
- data/lib/reap/class/rdoc.rb +1 -9
- data/lib/reap/class/test.rb +2 -7
- data/lib/reap/tasks.rb +51 -58
- data/note/LATEST +44 -0
- data/note/doap.xml +28 -0
- data/note/history/Rakefile-0.1 +308 -0
- data/web/ProjectInfo.html +80 -0
- data/web/images/grape.jpg +0 -0
- data/web/index.html +312 -0
- metadata +66 -27
- data/lib/reap/class/installer.rb +0 -178
@@ -0,0 +1,85 @@
|
|
1
|
+
# Ruby Treasures 0.4
|
2
|
+
# Copyright (C) 2002 Paul Brannan <paul@atdesk.com>
|
3
|
+
#
|
4
|
+
# You may distribute this software under the same terms as Ruby (see the file
|
5
|
+
# COPYING that was distributed with this library).
|
6
|
+
#
|
7
|
+
# Ruby Treasures 0.2
|
8
|
+
# Copyright (C) 2002 Paul Brannan <paul@atdesk.com>
|
9
|
+
#
|
10
|
+
# You may distribute this software under the same terms as Ruby (see the file
|
11
|
+
# COPYING that was distributed with this library).
|
12
|
+
#
|
13
|
+
# Run this Ruby script to prepare the RubyTreasures distribution for
|
14
|
+
# publication.
|
15
|
+
|
16
|
+
require 'find'
|
17
|
+
require 'ftools'
|
18
|
+
|
19
|
+
|
20
|
+
# Add licences to the top of every file and remove unnecessary files
|
21
|
+
|
22
|
+
license = IO.readlines('LICENSE')
|
23
|
+
ruby_license_comment = license.map { |i| i.sub(/^/, '# ') }
|
24
|
+
c_license_comment = ["/*\n"] + license.map { |i| i.sub(/^/, ' * ') } + [" */\n"]
|
25
|
+
|
26
|
+
def rm_rf(dir)
|
27
|
+
Dir.foreach(dir) do |f|
|
28
|
+
if not f =~ /\.?\.$/ then
|
29
|
+
filename = File.join(dir, f)
|
30
|
+
if File.directory?(filename) then
|
31
|
+
rm_rf(filename)
|
32
|
+
else
|
33
|
+
puts "Removing file #{filename}"
|
34
|
+
File.rm_f(filename)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
puts "Removing directory #{dir}"
|
39
|
+
Dir.rmdir(dir)
|
40
|
+
end
|
41
|
+
|
42
|
+
Find.find('.') do |file|
|
43
|
+
if File.directory?(file) then
|
44
|
+
case file
|
45
|
+
when /\/CVS$/
|
46
|
+
# Remove CVS directories
|
47
|
+
rm_rf(file)
|
48
|
+
else
|
49
|
+
# Remove empty directories
|
50
|
+
entries = Dir.entries(file)
|
51
|
+
entries.delete('.')
|
52
|
+
entries.delete('..')
|
53
|
+
entries.delete('CVS')
|
54
|
+
if entries.length == 0 then
|
55
|
+
rm_rf(file)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
else
|
59
|
+
case file
|
60
|
+
when /\.rb$/
|
61
|
+
# Add LICENSE to ruby sources
|
62
|
+
puts "Adding license to #{file}"
|
63
|
+
lines = ruby_license_comment + IO.readlines(file)
|
64
|
+
File.open(file, 'w') do |out|
|
65
|
+
lines.each do |line|
|
66
|
+
out.puts line
|
67
|
+
end
|
68
|
+
end
|
69
|
+
when /\.c$/
|
70
|
+
# Add LICENSE to C sources
|
71
|
+
puts "Adding license to #{file}"
|
72
|
+
lines = c_license_comment + IO.readlines(file)
|
73
|
+
File.open(file, 'w') do |out|
|
74
|
+
lines.each do |line|
|
75
|
+
out.puts line
|
76
|
+
end
|
77
|
+
end
|
78
|
+
when /~$/
|
79
|
+
# Remove temporary files
|
80
|
+
puts "Removing file #{file}"
|
81
|
+
File.rm_f(file)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2003, 2004 by Jim Weirich (jim@weirichhouse.org)
|
4
|
+
# All rights reserved.
|
5
|
+
|
6
|
+
# Permission is granted for use, copying, modification, distribution,
|
7
|
+
# and distribution of modified versions of this work as long as the
|
8
|
+
# above copyright notice is included.
|
9
|
+
|
10
|
+
# Configuration information about an upload host system.
|
11
|
+
# * name :: Name of host system.
|
12
|
+
# * webdir :: Base directory for the web information for the
|
13
|
+
# application. The application name (APP) is appended to
|
14
|
+
# this directory before using.
|
15
|
+
# * pkgdir :: Directory on the host system where packages can be
|
16
|
+
# placed.
|
17
|
+
HostInfo = Struct.new(:name, :webdir, :pkgdir)
|
18
|
+
|
19
|
+
# Manage several publishers as a single entity.
|
20
|
+
class CompositePublisher
|
21
|
+
def initialize
|
22
|
+
@publishers = []
|
23
|
+
end
|
24
|
+
|
25
|
+
# Add a publisher to the composite.
|
26
|
+
def add(pub)
|
27
|
+
@publishers << pub
|
28
|
+
end
|
29
|
+
|
30
|
+
# Upload all the individual publishers.
|
31
|
+
def upload
|
32
|
+
@publishers.each { |p| p.upload }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Publish an entire directory to an existing remote directory using
|
37
|
+
# SSH.
|
38
|
+
class SshDirPublisher
|
39
|
+
def initialize(host, remote_dir, local_dir)
|
40
|
+
@host = host
|
41
|
+
@remote_dir = remote_dir
|
42
|
+
@local_dir = local_dir
|
43
|
+
end
|
44
|
+
|
45
|
+
def upload
|
46
|
+
run %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Publish an entire directory to a fresh remote directory using SSH.
|
51
|
+
class SshFreshDirPublisher < SshDirPublisher
|
52
|
+
def upload
|
53
|
+
run %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil
|
54
|
+
run %{ssh #{@host} mkdir #{@remote_dir}}
|
55
|
+
super
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Publish a list of files to an existing remote directory.
|
60
|
+
class SshFilePublisher
|
61
|
+
# Create a publisher using the give host information.
|
62
|
+
def initialize(host, remote_dir, local_dir, *files)
|
63
|
+
@host = host
|
64
|
+
@remote_dir = remote_dir
|
65
|
+
@local_dir = local_dir
|
66
|
+
@files = files
|
67
|
+
end
|
68
|
+
|
69
|
+
# Upload the local directory to the remote directory.
|
70
|
+
def upload
|
71
|
+
@files.each do |fn|
|
72
|
+
run %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
|
2
|
+
require "enumerator"
|
3
|
+
require "http-access2"
|
4
|
+
|
5
|
+
require 'reap/iface/interface.rb'
|
6
|
+
|
7
|
+
|
8
|
+
class RubyForgeInterface < Interface
|
9
|
+
|
10
|
+
attr_accessor :username, :password, :cookie_jar
|
11
|
+
|
12
|
+
def initialize( master, section )
|
13
|
+
|
14
|
+
@name = master['name']
|
15
|
+
|
16
|
+
@username = master['rubyforge']['username'] || section['username']
|
17
|
+
|
18
|
+
@packge_id = section['package_id']
|
19
|
+
@lockfile_id = section['lockfile_id']
|
20
|
+
|
21
|
+
@group_id = section['group_id'] || 1024 # this is codeforpeople. it's just a default...
|
22
|
+
@private = section['private'] ? 0 : 1
|
23
|
+
|
24
|
+
# internal use
|
25
|
+
@uri = "http://rubyforge.org"
|
26
|
+
@cookie_jar = File::join(File::expand_path("~"), ".rubyforge.cookie_jar")
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# config = {
|
32
|
+
# "username" => "username", # this must be your username
|
33
|
+
# "password" => "password", # this must be your password
|
34
|
+
#
|
35
|
+
# "group_id" => 1024, # this is codeforpeople. it's just a default...
|
36
|
+
#
|
37
|
+
# "package_ids" => { # configure shortcuts for your packages here
|
38
|
+
# "traits" => 1241,
|
39
|
+
# "lockfile" => 1242,
|
40
|
+
# },
|
41
|
+
#
|
42
|
+
# "uri" => "http://rubyforge.org",
|
43
|
+
# "cookie_jar" => File::join(File::expand_path("~"), ".rubyforge.cookie_jar"),
|
44
|
+
# }
|
45
|
+
#
|
46
|
+
# opts =
|
47
|
+
# GetoptLong::new(
|
48
|
+
# [ "--username" , "-u" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
49
|
+
# [ "--password" , "-p" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
50
|
+
# [ "--cookie_jar" , "-c" , GetoptLong::REQUIRED_ARGUMENT ]
|
51
|
+
# ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
|
52
|
+
#
|
53
|
+
# username = opts['username'] || config['username']
|
54
|
+
# password = opts['password'] || config['password']
|
55
|
+
# cookie_jar = opts["cookie_jar"] || config['cookie_jar']
|
56
|
+
#
|
57
|
+
# setup
|
58
|
+
#
|
59
|
+
# mode = ARGV.shift
|
60
|
+
# abort "#{ $0 } [login|create_package (package_name)|add_package (package_id release_name release.ext)]" unless mode
|
61
|
+
|
62
|
+
def setup
|
63
|
+
|
64
|
+
page, form, method = nil
|
65
|
+
extheader = {}
|
66
|
+
|
67
|
+
case mode
|
68
|
+
|
69
|
+
when %r/login/
|
70
|
+
page = "/account/login.php"
|
71
|
+
method = "post_content"
|
72
|
+
|
73
|
+
form = {
|
74
|
+
"return_to" => "",
|
75
|
+
"form_loginname" => username,
|
76
|
+
"form_pw" => password,
|
77
|
+
"login" => "Login"
|
78
|
+
}
|
79
|
+
|
80
|
+
when %r/create_package/
|
81
|
+
page = "/frs/admin/index.php"
|
82
|
+
method = "post_content"
|
83
|
+
|
84
|
+
opts =
|
85
|
+
GetoptLong::new(
|
86
|
+
[ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
87
|
+
[ "--is_private" , "-P" , GetoptLong::REQUIRED_ARGUMENT ]
|
88
|
+
).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
|
89
|
+
|
90
|
+
package_name = ARGV.shift
|
91
|
+
abort "#{ $0 } package_name" unless package_name
|
92
|
+
|
93
|
+
group_id = opts["group_id"] || config["group_id"]
|
94
|
+
is_public = opts["is_private"] ? 0 : 1
|
95
|
+
|
96
|
+
form = {
|
97
|
+
"group_id" => group_id,
|
98
|
+
"package_name" => package_name,
|
99
|
+
"func" => "add_package",
|
100
|
+
"is_public" => is_public,
|
101
|
+
"submit" => "Create This Package",
|
102
|
+
}
|
103
|
+
|
104
|
+
when %r/add_release/
|
105
|
+
page = "/frs/admin/qrs.php"
|
106
|
+
method = "post_content"
|
107
|
+
|
108
|
+
opts =
|
109
|
+
GetoptLong::new(
|
110
|
+
[ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
111
|
+
[ "--release_date" , "-r" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
112
|
+
[ "--type_id" , "-t" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
113
|
+
[ "--processor_id" , "-P" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
114
|
+
[ "--release_nots" , "-n" , GetoptLong::REQUIRED_ARGUMENT ] ,
|
115
|
+
[ "--release_changes" , "-a" , GetoptLong::REQUIRED_ARGUMENT ]
|
116
|
+
).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
|
117
|
+
|
118
|
+
package_id, release_name, userfile, ignored = ARGV
|
119
|
+
abort "#{ $0 } package_name" unless
|
120
|
+
package_id and release_name and userfile
|
121
|
+
|
122
|
+
package_id = config["package_ids"][package_id] unless
|
123
|
+
package_id =~ %r/^\d+$/
|
124
|
+
|
125
|
+
group_id = opts["group_id"] || config["group_id"]
|
126
|
+
release_date = opts["release_date"] || Time::now.strftime('%Y-%m-%d %H:%M')
|
127
|
+
|
128
|
+
type_id = opts['type_id'] || userfile[%r|\.[^\./]+$|]
|
129
|
+
type_id = {
|
130
|
+
".deb" => 1000,
|
131
|
+
".rpm" => 2000,
|
132
|
+
".zip" => 3000,
|
133
|
+
".bz2" => 3100,
|
134
|
+
".gz" => 3110,
|
135
|
+
".src.zip" => 5000,
|
136
|
+
".src.bz2" => 5010,
|
137
|
+
".src.gz" => 5020,
|
138
|
+
".src.rpm" => 5100,
|
139
|
+
".src" => 5900,
|
140
|
+
".jpg" => 8000,
|
141
|
+
".txt" => 8100,
|
142
|
+
".text" => 8100,
|
143
|
+
".htm" => 8200,
|
144
|
+
".html" => 8200,
|
145
|
+
".pdf" => 8300,
|
146
|
+
".oth" => 9999,
|
147
|
+
".ebuild" => 1300,
|
148
|
+
".exe" => 1100,
|
149
|
+
".dmg" => 1200,
|
150
|
+
".tar.gz" => 5000,
|
151
|
+
".tgz" => 5000,
|
152
|
+
".gem" => 1400,
|
153
|
+
".pgp" => 8150,
|
154
|
+
".sig" => 8150,
|
155
|
+
}[type_id]
|
156
|
+
|
157
|
+
processor_id = opts['processor_id'] || 'Any'
|
158
|
+
processor_id = {
|
159
|
+
"i386" => 1000,
|
160
|
+
"IA64" => 6000,
|
161
|
+
"Alpha" => 7000,
|
162
|
+
"Any" => 8000,
|
163
|
+
"PPC" => 2000,
|
164
|
+
"MIPS" => 3000,
|
165
|
+
"Sparc" => 4000,
|
166
|
+
"UltraSparc" => 5000,
|
167
|
+
"Other" => 9999,
|
168
|
+
}[processor_id]
|
169
|
+
|
170
|
+
release_notes = opts['release_notes'] || nil
|
171
|
+
release_notes = open(release_notes) if release_notes
|
172
|
+
|
173
|
+
release_changes = opts['release_changes'] || nil
|
174
|
+
release_changes = open(release_changes) if release_changes
|
175
|
+
|
176
|
+
userfile = open(userfile)
|
177
|
+
|
178
|
+
preformatted = '1'
|
179
|
+
|
180
|
+
form = {
|
181
|
+
"group_id" => group_id,
|
182
|
+
"package_id" => package_id,
|
183
|
+
"release_name" => release_name,
|
184
|
+
"release_date" => release_date,
|
185
|
+
"type_id" => type_id,
|
186
|
+
"processor_id" => processor_id,
|
187
|
+
"preformatted" => preformatted,
|
188
|
+
"userfile" => userfile,
|
189
|
+
"submit" => "Release File"
|
190
|
+
}
|
191
|
+
|
192
|
+
boundary = Array::new(8){ "%2.2d" % rand(42) }.join('__')
|
193
|
+
extheader['content-type'] = "multipart/form-data; boundary=___#{ boundary }___"
|
194
|
+
|
195
|
+
else
|
196
|
+
abort "#{ $0 } login create_package add_release"
|
197
|
+
|
198
|
+
end
|
199
|
+
#
|
200
|
+
# http transaction
|
201
|
+
#
|
202
|
+
client = HTTPAccess2::Client::new ENV['HTTP_PROXY']
|
203
|
+
client.debug_dev = STDERR if ENV['DEBUG']
|
204
|
+
|
205
|
+
client.set_cookie_store cookie_jar
|
206
|
+
|
207
|
+
# fixes http-access2 bug
|
208
|
+
client.redirect_uri_callback = lambda do |res|
|
209
|
+
page = res.header['location'].first
|
210
|
+
page = page =~ %r/http/ ? page : "#{ config['uri'] }/#{ page }"
|
211
|
+
page
|
212
|
+
end
|
213
|
+
|
214
|
+
response = client.send "#{ method }", "#{ config['uri'] }/#{ page }", form, extheader
|
215
|
+
|
216
|
+
client.save_cookie_store
|
217
|
+
|
218
|
+
# fixes http-access2 bug
|
219
|
+
BEGIN {
|
220
|
+
require "http-access2"
|
221
|
+
module WebAgent::CookieUtils
|
222
|
+
def domain_match(host, domain)
|
223
|
+
case domain
|
224
|
+
when /\d+\.\d+\.\d+\.\d+/
|
225
|
+
return (host == domain)
|
226
|
+
when '.'
|
227
|
+
return true
|
228
|
+
when /^\./
|
229
|
+
#return tail_match?(domain, host)
|
230
|
+
return tail_match?(host, domain)
|
231
|
+
else
|
232
|
+
return (host == domain)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
}
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
|
247
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake/contrib/sshpublisher'
|
4
|
+
|
5
|
+
module Rake
|
6
|
+
|
7
|
+
class RubyForgePublisher < SshDirPublisher
|
8
|
+
attr_reader :project, :proj_id, :user
|
9
|
+
|
10
|
+
def initialize(projname, user)
|
11
|
+
super(
|
12
|
+
"#{user}@rubyforge.org",
|
13
|
+
"/var/www/gforge-projects/#{projname}",
|
14
|
+
"html")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake/contrib/compositepublisher'
|
4
|
+
|
5
|
+
module Rake
|
6
|
+
|
7
|
+
# Publish an entire directory to an existing remote directory using
|
8
|
+
# SSH.
|
9
|
+
class SshDirPublisher
|
10
|
+
def initialize(host, remote_dir, local_dir)
|
11
|
+
@host = host
|
12
|
+
@remote_dir = remote_dir
|
13
|
+
@local_dir = local_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
def upload
|
17
|
+
sh %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Publish an entire directory to a fresh remote directory using SSH.
|
22
|
+
class SshFreshDirPublisher < SshDirPublisher
|
23
|
+
def upload
|
24
|
+
sh %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil
|
25
|
+
sh %{ssh #{@host} mkdir #{@remote_dir}}
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Publish a list of files to an existing remote directory.
|
31
|
+
class SshFilePublisher
|
32
|
+
# Create a publisher using the give host information.
|
33
|
+
def initialize(host, remote_dir, local_dir, *files)
|
34
|
+
@host = host
|
35
|
+
@remote_dir = remote_dir
|
36
|
+
@local_dir = local_dir
|
37
|
+
@files = files
|
38
|
+
end
|
39
|
+
|
40
|
+
# Upload the local directory to the remote directory.
|
41
|
+
def upload
|
42
|
+
@files.each do |fn|
|
43
|
+
sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
DEBUG = false
|
4
|
+
URI = "-dtransami@cvs.suby.berlios.de:/cvsroot/suby"
|
5
|
+
|
6
|
+
cmd = nil
|
7
|
+
|
8
|
+
case ARGV[0]
|
9
|
+
when 'checkout', 'co'
|
10
|
+
if ARGV[1] and ARGV[1] != ''
|
11
|
+
cmd = %Q{cvs -z3 #{URI} co "#{ARGV[1]}"}
|
12
|
+
else
|
13
|
+
puts "no module given"
|
14
|
+
cmd = nil
|
15
|
+
end
|
16
|
+
when 'commit'
|
17
|
+
if ARGV[1] and ARGV[1] != ''
|
18
|
+
cmd = %Q{cvs -z3 #{URI} commit -m "#{ARGV[1]}"}
|
19
|
+
else
|
20
|
+
puts "no commit message given"
|
21
|
+
cmd = nil
|
22
|
+
end
|
23
|
+
when 'update'
|
24
|
+
cmd = %Q{cvs -z3 #{URI} update}
|
25
|
+
when 'add'
|
26
|
+
if ARGV[1]
|
27
|
+
cmd = %Q{cvs -z3 #{URI} add #{ARGV[1..-1].join(' ')}}
|
28
|
+
else
|
29
|
+
puts "no files given to add"
|
30
|
+
cmd = nil
|
31
|
+
end
|
32
|
+
when 'remove'
|
33
|
+
if ARGV[1]
|
34
|
+
cmd = %Q{cvs -z3 #{URI} remove #{ARGV[1..-1].join(' ')}}
|
35
|
+
else
|
36
|
+
puts "no file given to remove"
|
37
|
+
cmd = nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if DEBUG
|
42
|
+
puts cmd
|
43
|
+
elsif cmd
|
44
|
+
`#{cmd}`
|
45
|
+
end
|
46
|
+
|
data/forge/scaffold.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# ___ __ __ _ _ _____ _
|
2
|
+
# / __| __ __ _ / _|/ _|___| |__| | |_ _|_ _ __| |__
|
3
|
+
# \__ \/ _/ _` | _| _/ _ \ / _` | | |/ _` (_-< / /
|
4
|
+
# |___/\__\__,_|_| |_| \___/_\__,_| |_|\__,_/__/_\_\
|
5
|
+
#
|
6
|
+
|
7
|
+
# Current scaffold task just copies a folder. This incomplete
|
8
|
+
# version was an idea for dynamically creating the scaffolding
|
9
|
+
# instead.
|
10
|
+
|
11
|
+
#require 'rbconfig'
|
12
|
+
|
13
|
+
|
14
|
+
module Scaffold
|
15
|
+
extend self
|
16
|
+
|
17
|
+
SVNPaths => %w{
|
18
|
+
trunk
|
19
|
+
branch
|
20
|
+
tag
|
21
|
+
scrap
|
22
|
+
package
|
23
|
+
}
|
24
|
+
|
25
|
+
TrunkPaths = %w{
|
26
|
+
bin
|
27
|
+
lib
|
28
|
+
ext
|
29
|
+
conf
|
30
|
+
data
|
31
|
+
test
|
32
|
+
note
|
33
|
+
sample
|
34
|
+
}
|
35
|
+
|
36
|
+
TrunkFiles = %w{
|
37
|
+
README
|
38
|
+
INSTALL
|
39
|
+
COPYING
|
40
|
+
ProjectInfo
|
41
|
+
ChangeLog
|
42
|
+
Todo
|
43
|
+
RakeFile
|
44
|
+
setup.rb
|
45
|
+
}
|
46
|
+
|
47
|
+
def init( scf )
|
48
|
+
scf.name ||= 'yourlib.projectdomain.org'
|
49
|
+
end
|
50
|
+
|
51
|
+
def run( scf )
|
52
|
+
t = Time.now.strftime("%Y-%m-%d")
|
53
|
+
libdir = File.join( 'lib', "#{@name},#{t}" )
|
54
|
+
|
55
|
+
if @scm
|
56
|
+
SCMPaths.each { |d| makedir( d ) }
|
57
|
+
Dir.chdir 'trunk'
|
58
|
+
end
|
59
|
+
TrunkPaths.each { |d| makedir( d ) }
|
60
|
+
makedir_with_check( libdir )
|
61
|
+
TrunkFiles.each { |f| temlpate( f ) }
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
# Copy a file from lib/data to the current dir.
|
67
|
+
|
68
|
+
def template( filename )
|
69
|
+
dir = File.join( File.dirname(__FILE__), 'data' )
|
70
|
+
#dir = File.join( ::Config::CONFIG['datadir'], DATA_DIR )
|
71
|
+
f = File.join( dir, filename )
|
72
|
+
unless File.file?( f )
|
73
|
+
puts f
|
74
|
+
raise "Tempfile is missing."
|
75
|
+
end
|
76
|
+
|
77
|
+
if File.exists?(filename)
|
78
|
+
puts "#{filename} already exists."
|
79
|
+
return
|
80
|
+
end
|
81
|
+
# copy tmpf to Reapfile
|
82
|
+
FileUtils.cp( f, filename )
|
83
|
+
#puts "#{filename} created. You'll need to fill it out."
|
84
|
+
end
|
85
|
+
|
86
|
+
# Make a directory as long as it doesn't already exist.
|
87
|
+
|
88
|
+
def makedir( dir )
|
89
|
+
FileUtils.makedir_p( dir ) unless File.directory?( dir )
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
=begin
|
97
|
+
def scaffold
|
98
|
+
require 'reap/scaffold'
|
99
|
+
name =
|
100
|
+
domain =
|
101
|
+
Scaffold.go( name, domain )
|
102
|
+
end
|
103
|
+
|
104
|
+
def template( file_name = ProjectInfo )
|
105
|
+
#dir = File.dirname(File.dirname(__FILE__))
|
106
|
+
dir = File.join( ::Config::CONFIG['datadir'], DATA_DIR )
|
107
|
+
|
108
|
+
tmpf = File.join( dir, 'template.yaml' )
|
109
|
+
unless File.file?( tmpf )
|
110
|
+
puts tmpf
|
111
|
+
raise "Tempfile is missing."
|
112
|
+
end
|
113
|
+
|
114
|
+
if File.directory?(filename)
|
115
|
+
puts "#{filename} a directory. Cannot comply."
|
116
|
+
return
|
117
|
+
elsif File.file?(filename)
|
118
|
+
puts "#{filename} already exists."
|
119
|
+
return
|
120
|
+
end
|
121
|
+
# copy tmpf to Reapfile
|
122
|
+
FileUtils.cp( tmpf, filename )
|
123
|
+
puts "#{filename} created. You'll need to fill it out."
|
124
|
+
end
|
125
|
+
=end
|
126
|
+
|
@@ -0,0 +1,6 @@
|
|
1
|
+
I was playing with making Reaps forked tester
|
2
|
+
and the rubytest comment tester part of Test::Unit.
|
3
|
+
The code in this directory is the result of that
|
4
|
+
playing. It's didn't work out so well so I gave-up
|
5
|
+
on it. Just trash this code eventually. I left it here
|
6
|
+
just in case anyone might want to think about the idea.
|