rant 0.3.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/NEWS +19 -0
- data/README +51 -24
- data/Rantfile +7 -8
- data/doc/advanced.rdoc +3 -1
- data/doc/package.rdoc +280 -0
- data/doc/rantfile.rdoc +9 -19
- data/doc/rubyproject.rdoc +24 -16
- data/lib/rant/archive/minitar.rb +983 -0
- data/lib/rant/archive/rubyzip/ioextras.rb +122 -0
- data/lib/rant/archive/rubyzip/stdrubyext.rb +114 -0
- data/lib/rant/archive/rubyzip/tempfile_bugfixed.rb +195 -0
- data/lib/rant/archive/rubyzip.rb +1575 -0
- data/lib/rant/import/archive/tgz.rb +49 -0
- data/lib/rant/import/archive/zip.rb +67 -0
- data/lib/rant/import/archive.rb +312 -0
- data/lib/rant/import/autoclean.rb +2 -2
- data/lib/rant/import/c/dependencies.rb +3 -3
- data/lib/rant/import/clean.rb +1 -1
- data/lib/rant/import/directedrule.rb +1 -1
- data/lib/rant/import/package/tgz.rb +35 -0
- data/lib/rant/import/package/zip.rb +36 -0
- data/lib/rant/import/rubydoc.rb +1 -1
- data/lib/rant/import/rubypackage.rb +19 -77
- data/lib/rant/import/rubytest.rb +1 -1
- data/lib/rant/import/subfile.rb +28 -14
- data/lib/rant/import/win32/rubycmdwrapper.rb +1 -1
- data/lib/rant/import.rb +36 -16
- data/lib/rant/plugin/csharp.rb +1 -1
- data/lib/rant/rantenv.rb +2 -13
- data/lib/rant/rantfile.rb +11 -11
- data/lib/rant/rantlib.rb +7 -3
- data/lib/rant/rantsys.rb +53 -2
- data/lib/rant/rantvar.rb +62 -1
- data/misc/TODO +41 -0
- data/{devel-notes → misc/devel-notes} +6 -0
- data/misc/mt.rb +3 -0
- data/misc/t.rb +18 -0
- data/test/import/c/dependencies/test_c_dependencies.rb +18 -0
- data/test/import/package/MANIFEST +4 -0
- data/test/import/package/Rantfile +49 -0
- data/test/import/package/deep/sub/sub/f1 +1 -0
- data/test/import/package/sub/f1 +1 -0
- data/test/import/package/sub2/f1 +1 -0
- data/test/import/package/test_package.rb +425 -0
- data/test/import/subfile/Rantfile +8 -0
- data/test/import/subfile/test_subfile.rb +12 -0
- data/test/project_rb1/rantfile.rb +3 -4
- data/test/project_rb1/test_project_rb1.rb +16 -40
- data/test/rant-import/test_rant-import.rb +3 -3
- data/test/test_filelist.rb +39 -2
- data/test/tutil.rb +89 -3
- metadata +35 -6
- data/TODO +0 -21
- data/lib/rant/import/package.rb +0 -258
- /data/{rantmethods.rb → misc/rantmethods.rb} +0 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
# tgz.rb - Archive::Tgz generator for Rant.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
|
5
|
+
|
6
|
+
require 'rant/import/archive'
|
7
|
+
#require 'rant/archive/minitar' #rant-import:uncomment
|
8
|
+
|
9
|
+
module Rant::Generators::Archive
|
10
|
+
# Use this class as a generator to create gzip compressed tar
|
11
|
+
# archives.
|
12
|
+
class Tgz < Base
|
13
|
+
def initialize(*args)
|
14
|
+
super
|
15
|
+
@extension = ".tgz"
|
16
|
+
end
|
17
|
+
# Ensure to set #rac first.
|
18
|
+
# Creates a file task wich invokes tar to create a tgz
|
19
|
+
# archive. Returns the created task.
|
20
|
+
def define_task
|
21
|
+
if ::Rant::Env.have_tar?
|
22
|
+
define_tar_task
|
23
|
+
else
|
24
|
+
define_minitar_task
|
25
|
+
end
|
26
|
+
end
|
27
|
+
private
|
28
|
+
def define_tar_task
|
29
|
+
define_cmd_task { |path, t|
|
30
|
+
@rac.cx.sys "tar -h --no-recursion --files-from #{path} -czf #{t.name}"
|
31
|
+
}
|
32
|
+
end
|
33
|
+
def define_minitar_task
|
34
|
+
define_cmd_task do |path, t|
|
35
|
+
minitar_tgz t.name, @res_files
|
36
|
+
end
|
37
|
+
end
|
38
|
+
def minitar_tgz fn, files, opts = {:recurse => false}
|
39
|
+
require 'zlib'
|
40
|
+
require 'rant/archive/minitar'
|
41
|
+
@rac.cmd_msg "minitar #{fn}"
|
42
|
+
files = files.to_ary if files.respond_to? :to_ary
|
43
|
+
tgz = Zlib::GzipWriter.new(File.open(fn, 'wb'))
|
44
|
+
# pack closes tgz
|
45
|
+
Rant::Archive::Minitar.pack(files, tgz, opts[:recurse])
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end # class Tgz
|
49
|
+
end # module Rant::Generators::Archive
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
# zip.rb - Archive::Zip generator for Rant.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
|
5
|
+
|
6
|
+
require 'rant/import/archive'
|
7
|
+
#require 'rant/archive/rubyzip' #rant-import:uncomment
|
8
|
+
|
9
|
+
module Rant::Generators::Archive
|
10
|
+
# Use this class as a generator to create zip archives.
|
11
|
+
class Zip < Base
|
12
|
+
def initialize(*args)
|
13
|
+
super
|
14
|
+
@extension = ".zip"
|
15
|
+
end
|
16
|
+
# Ensure to set #rac first.
|
17
|
+
# Creates a file task wich invokes zip to create a zip
|
18
|
+
# archive. Returns the created task.
|
19
|
+
def define_task
|
20
|
+
if ::Rant::Env.have_zip?
|
21
|
+
define_zip_task
|
22
|
+
else
|
23
|
+
define_rubyzip_task
|
24
|
+
end
|
25
|
+
end
|
26
|
+
def define_zip_task
|
27
|
+
define_cmd_task { |path, t|
|
28
|
+
# Add -y option to store symlinks instead of
|
29
|
+
# referenced files.
|
30
|
+
cmd = "zip -@q #{t.name}"
|
31
|
+
@rac.cmd_msg cmd
|
32
|
+
IO.popen cmd, "w" do |z|
|
33
|
+
z.print IO.read(path)
|
34
|
+
end
|
35
|
+
raise Rant::CommandError.new(cmd, $?) unless $?.success?
|
36
|
+
}
|
37
|
+
end
|
38
|
+
def define_rubyzip_task
|
39
|
+
define_cmd_task do |path, t|
|
40
|
+
rubyzip t.name, @res_files
|
41
|
+
end
|
42
|
+
end
|
43
|
+
def rubyzip fn, files, opts = {:recurse => false}
|
44
|
+
require 'rant/archive/rubyzip'
|
45
|
+
@rac.cmd_msg "rubyzip #{fn}"
|
46
|
+
Rant::Archive::Rubyzip::ZipFile.open fn,
|
47
|
+
Rant::Archive::Rubyzip::ZipFile::CREATE do |z|
|
48
|
+
if opts[:recurse]
|
49
|
+
require 'find'
|
50
|
+
files.each { |f|
|
51
|
+
if test ?d, f
|
52
|
+
Find.find(f) { |f2| z.add f2, f2 }
|
53
|
+
else
|
54
|
+
z.add f, f
|
55
|
+
end
|
56
|
+
}
|
57
|
+
else
|
58
|
+
files.each { |f|
|
59
|
+
z.add f, f
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
66
|
+
end # class Zip
|
67
|
+
end # module Rant::Generators::Archive
|
@@ -0,0 +1,312 @@
|
|
1
|
+
|
2
|
+
# archive.rb - Archiving support for Rant.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
|
5
|
+
#
|
6
|
+
# This file currently doesn't contain a generator. Thus an <tt>import
|
7
|
+
# "archive"</tt> doesn't make sense. Do an <tt>import
|
8
|
+
# "archive/tgz"</tt> or <tt>import "archive/zip"</tt> instead.
|
9
|
+
|
10
|
+
require 'rant/rantlib'
|
11
|
+
require 'rant/import/subfile'
|
12
|
+
|
13
|
+
module Rant::Generators::Archive
|
14
|
+
# A subclass has to provide a +define_task+ method to act as a
|
15
|
+
# generator.
|
16
|
+
class Base
|
17
|
+
extend Rant::MetaUtils
|
18
|
+
|
19
|
+
def self.rant_gen(rac, ch, args, &block)
|
20
|
+
pkg_name = args.shift
|
21
|
+
unless pkg_name
|
22
|
+
rac.abort_at(ch,
|
23
|
+
"#{self} takes at least one argument (package name)")
|
24
|
+
end
|
25
|
+
opts = nil
|
26
|
+
flags = []
|
27
|
+
arg = args.shift
|
28
|
+
case arg
|
29
|
+
when String
|
30
|
+
basedir = pkg_name
|
31
|
+
pkg_name = arg
|
32
|
+
when Symbol
|
33
|
+
flags << arg
|
34
|
+
else
|
35
|
+
opts = arg
|
36
|
+
end
|
37
|
+
flags << arg while Symbol === (arg = args.shift)
|
38
|
+
opts ||= (arg || {})
|
39
|
+
unless args.empty?
|
40
|
+
rac.abort_at(ch, "#{self}: too many arguments")
|
41
|
+
end
|
42
|
+
|
43
|
+
pkg = self.new(pkg_name)
|
44
|
+
pkg.basedir = basedir if basedir
|
45
|
+
pkg.rac = rac
|
46
|
+
pkg.ch = ch
|
47
|
+
flags.each { |f|
|
48
|
+
case f
|
49
|
+
when :manifest
|
50
|
+
pkg.manifest = "MANIFEST"
|
51
|
+
when :verbose
|
52
|
+
# TODO
|
53
|
+
when :quiet
|
54
|
+
# TODO
|
55
|
+
else
|
56
|
+
rac.warn_msg(
|
57
|
+
"#{self}: ignoring unknown flag #{flag}")
|
58
|
+
end
|
59
|
+
}
|
60
|
+
if opts.respond_to? :to_hash
|
61
|
+
opts = opts.to_hash
|
62
|
+
else
|
63
|
+
rac.abort_at(ch,
|
64
|
+
"#{self}: option argument has to be a hash.")
|
65
|
+
end
|
66
|
+
opts.each { |k, v|
|
67
|
+
case k
|
68
|
+
when :version
|
69
|
+
pkg.version = v
|
70
|
+
when :extension
|
71
|
+
pkg.extension = v
|
72
|
+
when :files
|
73
|
+
pkg.files = v
|
74
|
+
when :manifest
|
75
|
+
pkg.manifest = v
|
76
|
+
when :files_only
|
77
|
+
pkg.files_only = v
|
78
|
+
else
|
79
|
+
rac.warn_msg(
|
80
|
+
"#{self}: ignoring unknown option #{k}")
|
81
|
+
end
|
82
|
+
}
|
83
|
+
desc = pkg.rac.pop_desc
|
84
|
+
pkg.define_manifest_task if opts[:files] && opts[:manifest]
|
85
|
+
pkg.rac.cx.desc desc
|
86
|
+
pkg.define_task
|
87
|
+
pkg
|
88
|
+
end
|
89
|
+
|
90
|
+
string_attr :name
|
91
|
+
string_attr :version
|
92
|
+
string_attr :basedir
|
93
|
+
string_attr :extension
|
94
|
+
rant_attr :files
|
95
|
+
string_attr :manifest
|
96
|
+
attr_reader :archive_path
|
97
|
+
# If this is true, directories won't be included for packaging
|
98
|
+
# (only files). Defaults to true.
|
99
|
+
rant_attr :files_only
|
100
|
+
# Caller information, e.g.: {:file => "Rantfile", :ln => 10}
|
101
|
+
attr_accessor :ch
|
102
|
+
|
103
|
+
def initialize(name, files = nil)
|
104
|
+
self.name = name or raise "package name required"
|
105
|
+
@files = files
|
106
|
+
@version, @extension, @archive_path = nil
|
107
|
+
@rac = nil
|
108
|
+
@pkg_task = nil
|
109
|
+
@ch = nil
|
110
|
+
@files_only = false
|
111
|
+
@manifest_task = nil
|
112
|
+
@basedir = nil
|
113
|
+
@res_files = nil
|
114
|
+
@manifest = nil
|
115
|
+
@dist_dir_task = nil
|
116
|
+
end
|
117
|
+
|
118
|
+
def rac
|
119
|
+
@rac
|
120
|
+
end
|
121
|
+
def rac=(val)
|
122
|
+
@rac = val
|
123
|
+
@pkg_task = nil
|
124
|
+
end
|
125
|
+
|
126
|
+
# Path to archive file.
|
127
|
+
def path
|
128
|
+
if basedir
|
129
|
+
File.join(basedir, get_archive_path)
|
130
|
+
else
|
131
|
+
get_archive_path
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Path to archive without basedir.
|
136
|
+
def get_archive_path
|
137
|
+
return @archive_path if @archive_path
|
138
|
+
path = name.dup
|
139
|
+
path << "-#@version" if @version
|
140
|
+
path << @extension if @extension
|
141
|
+
@archive_path = path
|
142
|
+
end
|
143
|
+
|
144
|
+
# This method sets @res_files to the return value, a list of
|
145
|
+
# files to include in the archive.
|
146
|
+
def get_files
|
147
|
+
return @res_files if @res_files
|
148
|
+
fl = @files ? @files.dup : []
|
149
|
+
if @manifest
|
150
|
+
fl = read_manifest unless @files
|
151
|
+
fl = Rant::RacFileList.filelist(@rac, fl)
|
152
|
+
fl << @manifest
|
153
|
+
elsif @files_only
|
154
|
+
fl = Rant::RacFileList.filelist(@rac, fl)
|
155
|
+
fl.no_dirs
|
156
|
+
else
|
157
|
+
fl = Rant::RacFileList.filelist(@rac, fl)
|
158
|
+
end
|
159
|
+
@res_files = fl.lazy_uniq!.lazy_sort!
|
160
|
+
end
|
161
|
+
|
162
|
+
# Creates an (eventually) temporary manifest file and yields
|
163
|
+
# with the path of this file as argument.
|
164
|
+
def with_manifest
|
165
|
+
fl = get_files
|
166
|
+
if @manifest
|
167
|
+
rac.make @manifest
|
168
|
+
yield @manifest
|
169
|
+
else
|
170
|
+
require 'tempfile'
|
171
|
+
tf = Tempfile.new "rant"
|
172
|
+
begin
|
173
|
+
fl.each { |path| tf.puts path }
|
174
|
+
tf.close
|
175
|
+
yield(tf.path)
|
176
|
+
ensure
|
177
|
+
tf.unlink
|
178
|
+
end
|
179
|
+
end
|
180
|
+
nil
|
181
|
+
end
|
182
|
+
|
183
|
+
def define_manifest_task
|
184
|
+
return @manifest_task if @manifest_task
|
185
|
+
@manifest_task =
|
186
|
+
@rac.gen ::Rant::Task, @manifest do |t|
|
187
|
+
def t.each_target
|
188
|
+
goto_task_home
|
189
|
+
yield name
|
190
|
+
end
|
191
|
+
t.needed {
|
192
|
+
# fl refers to @res_files
|
193
|
+
fl = get_files
|
194
|
+
if test ?f, @manifest
|
195
|
+
read_manifest != @res_files.to_ary
|
196
|
+
else
|
197
|
+
true
|
198
|
+
end
|
199
|
+
}
|
200
|
+
t.act {
|
201
|
+
write_manifest get_files
|
202
|
+
}
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
def read_manifest
|
208
|
+
fl = []
|
209
|
+
open @manifest do |f|
|
210
|
+
f.each { |line|
|
211
|
+
line.chomp!
|
212
|
+
fl << line unless line.strip.empty?
|
213
|
+
}
|
214
|
+
end
|
215
|
+
fl
|
216
|
+
end
|
217
|
+
def write_manifest fl
|
218
|
+
@rac.cmd_msg "writing #@manifest" if @rac
|
219
|
+
open @manifest, "w" do |f|
|
220
|
+
fl.each { |path| f.puts path }
|
221
|
+
end
|
222
|
+
end
|
223
|
+
def define_cmd_task
|
224
|
+
return @pkg_task if @pkg_task
|
225
|
+
targ = {get_archive_path => get_files}
|
226
|
+
@pkg_task =
|
227
|
+
::Rant::Generators::SubFile.rant_gen(
|
228
|
+
@rac, @ch, [basedir, targ].compact) do |t|
|
229
|
+
with_manifest { |path| yield(path, t) }
|
230
|
+
end
|
231
|
+
end
|
232
|
+
# Define a task to package one dir. For usage in subclasses.
|
233
|
+
# This method sets the following instance variables:
|
234
|
+
# [@dist_dirname] The name of the directory which shall be
|
235
|
+
# the root of all entries in the archive.
|
236
|
+
# [@dist_root] The directory in which the @dist_dirname
|
237
|
+
# directory will be created with contents for
|
238
|
+
# archiving.
|
239
|
+
# [@dist_path] @dist_root/@dist_dirname (or just
|
240
|
+
# @dist_dirname if @dist_root is ".")
|
241
|
+
#
|
242
|
+
# The block supplied to this method will be the action
|
243
|
+
# to create the archive file (e.g. by invoking the tar
|
244
|
+
# command).
|
245
|
+
def define_task_for_dir(&block)
|
246
|
+
return @pkg_task if @pkg_task
|
247
|
+
|
248
|
+
get_files # set @res_files
|
249
|
+
@dist_dirname = File.split(name).last
|
250
|
+
@dist_dirname << "-#@version" if @version
|
251
|
+
@dist_root, = File.split path
|
252
|
+
@dist_path = (@dist_root == "." ?
|
253
|
+
@dist_dirname : File.join(@dist_root, @dist_dirname))
|
254
|
+
|
255
|
+
targ = {get_archive_path => [@dist_path]}
|
256
|
+
#STDERR.puts "basedir: #{basedir}, fn: #@archive_path"
|
257
|
+
@pkg_task = ::Rant::Generators::SubFile.rant_gen(
|
258
|
+
@rac, @ch, [basedir, targ].compact, &block)
|
259
|
+
|
260
|
+
define_dist_dir_task
|
261
|
+
|
262
|
+
@pkg_task
|
263
|
+
end
|
264
|
+
|
265
|
+
# This method sets the instance variable @dist_dir_task.
|
266
|
+
# Assumes that @res_files is set.
|
267
|
+
#
|
268
|
+
# Returns a task which creates the directory @dist_path and
|
269
|
+
# links/copies @res_files to @dist_path.
|
270
|
+
def define_dist_dir_task
|
271
|
+
return if @dist_dir_task
|
272
|
+
cx = @rac.cx
|
273
|
+
if @basedir
|
274
|
+
@basedir.sub!(/\/$/, '') if @basedir.length > 1
|
275
|
+
c_dir = @dist_path.sub(/^#@basedir\//, '')
|
276
|
+
targ = {c_dir => @res_files}
|
277
|
+
else
|
278
|
+
targ = {@dist_path => @res_files}
|
279
|
+
end
|
280
|
+
@dist_dir_task = Rant::Generators::Directory.rant_gen(
|
281
|
+
@rac, @ch, [@basedir, targ].compact) { |t|
|
282
|
+
# ensure to create new and empty destination directory
|
283
|
+
if Dir.entries(@dist_path).size > 2 # "." and ".."
|
284
|
+
cx.sys.rm_rf(@dist_path)
|
285
|
+
cx.sys.mkdir(@dist_path)
|
286
|
+
end
|
287
|
+
# evaluate directory structure first
|
288
|
+
dirs = []
|
289
|
+
fl = []
|
290
|
+
@res_files.each { |e|
|
291
|
+
if test(?d, e)
|
292
|
+
dirs << e unless dirs.include? e
|
293
|
+
else # assuming e is a file
|
294
|
+
fl << e
|
295
|
+
dir = File.dirname(e)
|
296
|
+
dirs << dir unless dir == "." || dirs.include?(dir)
|
297
|
+
end
|
298
|
+
}
|
299
|
+
# create directory structure
|
300
|
+
dirs.each { |dir|
|
301
|
+
dest = File.join(@dist_path, dir)
|
302
|
+
cx.sys.mkpath(dest) unless test(?d, dest)
|
303
|
+
}
|
304
|
+
# link or copy files
|
305
|
+
fl.each { |f|
|
306
|
+
dest = File.join(@dist_path, f)
|
307
|
+
cx.sys.safe_ln(f, dest)
|
308
|
+
}
|
309
|
+
}
|
310
|
+
end
|
311
|
+
end # class Base
|
312
|
+
end # module Rant::Generators::Archive
|
@@ -7,7 +7,7 @@ require 'rant/rantlib'
|
|
7
7
|
require 'rant/import/clean'
|
8
8
|
|
9
9
|
class Rant::Generators::AutoClean
|
10
|
-
def self.
|
10
|
+
def self.rant_gen(rac, ch, args, &block)
|
11
11
|
# validate args
|
12
12
|
if args.size > 1
|
13
13
|
rac.abort_at(ch,
|
@@ -17,7 +17,7 @@ class Rant::Generators::AutoClean
|
|
17
17
|
|
18
18
|
# we generate a normal clean task too, so that the user can
|
19
19
|
# add files to clean via a var
|
20
|
-
::Rant::Generators::Clean.
|
20
|
+
::Rant::Generators::Clean.rant_gen(rac, ch, [tname])
|
21
21
|
|
22
22
|
# create task
|
23
23
|
rac.task :__caller__ => ch, tname => [] do |t|
|
@@ -8,7 +8,7 @@ require 'rant/c/include'
|
|
8
8
|
|
9
9
|
module Rant::Generators::C end
|
10
10
|
class Rant::Generators::C::Dependencies
|
11
|
-
def self.
|
11
|
+
def self.rant_gen(rac, ch, args, &block)
|
12
12
|
c_files, out_fn, include_pathes, opts = nil
|
13
13
|
# args validation
|
14
14
|
if block
|
@@ -121,7 +121,7 @@ class Rant::Generators::C::Dependencies
|
|
121
121
|
nil
|
122
122
|
end
|
123
123
|
def self.file_deps(target, deps)
|
124
|
-
s = "gen SourceNode, #{target.to_str.
|
125
|
-
s << "[#{ deps.map{ |fn| fn.to_str.
|
124
|
+
s = "gen SourceNode, #{target.to_str.dump} => "
|
125
|
+
s << "[#{ deps.map{ |fn| fn.to_str.dump }.join(', ')}]"
|
126
126
|
end
|
127
127
|
end # class Rant::Generators::C::Dependencies
|
data/lib/rant/import/clean.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
# tgz.rb - Package::Tgz generator for Rant.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
|
5
|
+
|
6
|
+
require 'rant/import/archive/tgz'
|
7
|
+
|
8
|
+
# The classes in this module act as generators which create archives.
|
9
|
+
# The difference to the Archive::* generators is, that the Package
|
10
|
+
# generators move all archive entries into a toplevel directory.
|
11
|
+
module Rant::Generators::Package
|
12
|
+
class Tgz < Rant::Generators::Archive::Tgz
|
13
|
+
def define_tar_task
|
14
|
+
define_task_for_dir do |t|
|
15
|
+
fn = @dist_dirname + (@extension ? @extension : "")
|
16
|
+
old_pwd = Dir.pwd
|
17
|
+
Dir.chdir @dist_root
|
18
|
+
@rac.cx.sys %W(tar zcf #{fn} #@dist_dirname)
|
19
|
+
Dir.chdir old_pwd
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def define_minitar_task
|
23
|
+
define_task_for_dir do
|
24
|
+
fn = @dist_dirname + (@extension ? @extension : "")
|
25
|
+
old_pwd = Dir.pwd
|
26
|
+
begin
|
27
|
+
Dir.chdir @dist_root
|
28
|
+
minitar_tgz fn, @dist_dirname, :recurse => true
|
29
|
+
ensure
|
30
|
+
Dir.chdir old_pwd
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end # class Tgz
|
35
|
+
end # module Rant::Generators::Package
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
# zip.rb - Package::Zip generator for Rant.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
|
5
|
+
|
6
|
+
require 'rant/import/archive/zip'
|
7
|
+
|
8
|
+
module Rant::Generators::Package
|
9
|
+
class Zip < Rant::Generators::Archive::Zip
|
10
|
+
def define_zip_task
|
11
|
+
define_task_for_dir do
|
12
|
+
fn = @dist_dirname + (@extension ? @extension : "")
|
13
|
+
old_pwd = Dir.pwd
|
14
|
+
Dir.chdir @dist_root
|
15
|
+
# zip options:
|
16
|
+
# y: store symlinks instead of referenced files
|
17
|
+
# r: recurse into directories
|
18
|
+
# q: quiet operation
|
19
|
+
@rac.cx.sys %W(zip -yqr #{fn} #@dist_dirname)
|
20
|
+
Dir.chdir old_pwd
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def define_rubyzip_task
|
24
|
+
define_task_for_dir do
|
25
|
+
fn = @dist_dirname + (@extension ? @extension : "")
|
26
|
+
old_pwd = Dir.pwd
|
27
|
+
begin
|
28
|
+
Dir.chdir @dist_root
|
29
|
+
rubyzip fn, @dist_dirname, :recurse => true
|
30
|
+
ensure
|
31
|
+
Dir.chdir old_pwd
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end # class Zip
|
36
|
+
end # module Rant::Generators::Package
|