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
data/misc/TODO
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
= TODO
|
3
|
+
|
4
|
+
== Solve archiving dependency problem
|
5
|
+
Because of timed depdencies, the archiving tasks don't recognize if
|
6
|
+
the only change is that a file was removed. The only exception is a
|
7
|
+
primitive +Archive+ task whith manifest synchronization. The problem
|
8
|
+
can be solved by writing a list of files parallel to archive creation
|
9
|
+
or to write a signature of the filelist.
|
10
|
+
|
11
|
+
== Dependency alternation
|
12
|
+
Allow at least two tasks as one dependency where the first available
|
13
|
+
will actually used to satisfy the dependency, pseudo code:
|
14
|
+
task :a => :b | :c
|
15
|
+
Rant should first try :b and if the task :b exists and succeds
|
16
|
+
:c won't be considered, if task :b doesn't exist, rant should try
|
17
|
+
to make :c.
|
18
|
+
|
19
|
+
== GET RID OF CLASS Rant::Path
|
20
|
+
Done (0.3.7).
|
21
|
+
|
22
|
+
== Packaging
|
23
|
+
Try minitar if tar is not available.
|
24
|
+
Done (0.3.9).
|
25
|
+
|
26
|
+
== C# plugin
|
27
|
+
Define the method +assembly+ for building a file with the C# compiler?
|
28
|
+
Done.
|
29
|
+
|
30
|
+
== Predefined tasks
|
31
|
+
|
32
|
+
Add a 'distclean' task that removes all files and directories
|
33
|
+
generatet by any file task.
|
34
|
+
Done (AutoClean generator).
|
35
|
+
|
36
|
+
== Java plugin
|
37
|
+
|
38
|
+
At least for the 1.0.0 release.
|
39
|
+
|
40
|
+
#--
|
41
|
+
# vim:tw=70
|
@@ -1,4 +1,10 @@
|
|
1
1
|
|
2
|
+
== Task alias
|
3
|
+
Since +alias+ is a Ruby keyword, we could use +nick+ to create task
|
4
|
+
alises.
|
5
|
+
Other choices: short, cut, name, label, syn, synonym, ident, term,
|
6
|
+
shortcut, abbreviation
|
7
|
+
|
2
8
|
== Here docs
|
3
9
|
Don't use here documents in the Rant sources, imports and plugins.
|
4
10
|
They'll get messed up by the rant-import command.
|
data/misc/mt.rb
ADDED
data/misc/t.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
=begin
|
3
|
+
Run this with `rant -f t.rb', it should print the following 3 lines:
|
4
|
+
Task
|
5
|
+
Rant::Task
|
6
|
+
a
|
7
|
+
=end
|
8
|
+
require 'rubygems'
|
9
|
+
#require 'rake'
|
10
|
+
require 'mt'
|
11
|
+
|
12
|
+
gen Task, "a" do |t|
|
13
|
+
t.needed { true }
|
14
|
+
t.act { puts t.name }
|
15
|
+
end
|
16
|
+
|
17
|
+
p ::Task
|
18
|
+
p Task
|
@@ -89,4 +89,22 @@ class TestImportCDependencies < Test::Unit::TestCase
|
|
89
89
|
assert(!test(?e, f), "#{f} should get unlinked by AutoClean")
|
90
90
|
}
|
91
91
|
end
|
92
|
+
def test_rant_import_hello_c
|
93
|
+
run_import("-q", "--auto", "ant.t")
|
94
|
+
assert_exit
|
95
|
+
assert(test(?f, "ant.t"))
|
96
|
+
run_ruby("ant.t", "hello.t")
|
97
|
+
assert_exit
|
98
|
+
assert(test(?f, "hello.t"))
|
99
|
+
assert(test(?f, "c_dependencies"))
|
100
|
+
out = run_ruby("ant.t", "hello.t")
|
101
|
+
assert(out.strip.empty?)
|
102
|
+
open "ant.t" do |f|
|
103
|
+
requires = extract_requires(f)
|
104
|
+
requires.each { |fn|
|
105
|
+
assert_no_match(/^rant\//, fn,
|
106
|
+
"#{fn} should be inlined by rant-import")
|
107
|
+
}
|
108
|
+
end
|
109
|
+
end
|
92
110
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
import %w(package/tgz package/zip autoclean)
|
3
|
+
|
4
|
+
gen Archive::Tgz, "t1", :manifest => "MANIFEST"
|
5
|
+
desc "Create t1.zip"
|
6
|
+
gen Archive::Zip, "t1", :manifest => "MANIFEST"
|
7
|
+
|
8
|
+
desc "Create t2.tgz"
|
9
|
+
gen Archive::Tgz, "t2",
|
10
|
+
:files => sys["sub*/f?"],
|
11
|
+
:manifest => "m2.tgz.t"
|
12
|
+
|
13
|
+
gen Archive::Zip, "t2",
|
14
|
+
:files => sys["sub*/f?"],
|
15
|
+
:manifest => "m2.zip.t"
|
16
|
+
|
17
|
+
gen Archive::Tgz, "t3", :files => %w(Rantfile sub/f1)
|
18
|
+
gen Archive::Zip, "t3", :files => sys["Rantfile", "sub/f1"]
|
19
|
+
|
20
|
+
gen Archive::Tgz, "pkg.t/t4", :manifest, :version => "1.0.0"
|
21
|
+
|
22
|
+
gen Archive::Zip, "zip.t", "t4", :manifest, :version => "1.0.0"
|
23
|
+
|
24
|
+
gen Package::Tgz, "pkg2.t", :manifest
|
25
|
+
|
26
|
+
gen Package::Zip, "pkg.t/pkg",
|
27
|
+
:manifest => "CONTENTS",
|
28
|
+
:files => %w(deep/sub/sub/f1)
|
29
|
+
|
30
|
+
gen Package::Tgz, "sub", "pkg.t/pkg", :manifest,
|
31
|
+
:version => "0.1",
|
32
|
+
:extension => ".tar.gz"
|
33
|
+
|
34
|
+
gen Package::Tgz, "sub.t/", "pkg", :files => %w(sub/f1)
|
35
|
+
|
36
|
+
gen Package::Tgz, "t5",
|
37
|
+
:manifest => "mf5.t",
|
38
|
+
:files => %w(Rantfile mf5.t)
|
39
|
+
|
40
|
+
gen Package::Tgz, "t6", :files => %w(sub6.t)
|
41
|
+
gen Package::Zip, "t6", :files => %w(sub6.t)
|
42
|
+
|
43
|
+
gen Archive::Tgz, "t7", :files => %w(sub7.t)
|
44
|
+
gen Archive::Zip, "t7", :files => %w(sub7.t)
|
45
|
+
|
46
|
+
gen Archive::Tgz, "sym", :files => sys["subs.t/**/*"]
|
47
|
+
gen Archive::Zip, "sym", :files => sys["subs.t/**/*"]
|
48
|
+
|
49
|
+
gen AutoClean
|
@@ -0,0 +1 @@
|
|
1
|
+
deep/sub/sub/f1
|
@@ -0,0 +1 @@
|
|
1
|
+
sub/f1
|
@@ -0,0 +1 @@
|
|
1
|
+
sub2/f1
|
@@ -0,0 +1,425 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'tutil'
|
4
|
+
|
5
|
+
$testIPackageDir ||= File.expand_path(File.dirname(__FILE__))
|
6
|
+
|
7
|
+
class TestImportPackage < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
# Ensure we run in test directory.
|
10
|
+
Dir.chdir $testIPackageDir
|
11
|
+
@pkg_dir = nil
|
12
|
+
@contents = {}
|
13
|
+
end
|
14
|
+
def teardown
|
15
|
+
assert_rant("autoclean")
|
16
|
+
Dir["*.{tgz,zip,t}"].each { |f|
|
17
|
+
assert(false, "#{f} should be removed by AutoClean")
|
18
|
+
}
|
19
|
+
end
|
20
|
+
def check_contents(atype, archive, files, dirs = [], manifest_file = nil)
|
21
|
+
old_pwd = Dir.pwd
|
22
|
+
FileUtils.mkdir "u.t"
|
23
|
+
FileUtils.cp archive, "u.t"
|
24
|
+
FileUtils.cd "u.t"
|
25
|
+
archive = File.basename archive
|
26
|
+
unpack_archive atype, archive
|
27
|
+
if @pkg_dir
|
28
|
+
assert(test(?d, @pkg_dir))
|
29
|
+
FileUtils.cd @pkg_dir
|
30
|
+
end
|
31
|
+
files.each { |f|
|
32
|
+
assert(test(?f, f), "file #{f} is missing in archive")
|
33
|
+
content = @contents[f]
|
34
|
+
if content
|
35
|
+
assert_equal(content, File.read(f))
|
36
|
+
end
|
37
|
+
}
|
38
|
+
dirs.each { |f|
|
39
|
+
assert(test(?d, f), "dir #{f} is missing in archive")
|
40
|
+
}
|
41
|
+
count = files.size + dirs.size
|
42
|
+
# + 1 because of the archive file
|
43
|
+
count += 1 unless @pkg_dir
|
44
|
+
assert_equal(count, Dir["**/*"].size)
|
45
|
+
if manifest_file
|
46
|
+
check_manifest(manifest_file, files)
|
47
|
+
end
|
48
|
+
yield if block_given?
|
49
|
+
ensure
|
50
|
+
FileUtils.cd old_pwd
|
51
|
+
FileUtils.rm_r "u.t"
|
52
|
+
end
|
53
|
+
def check_manifest(file, entries)
|
54
|
+
assert(test(?f, file))
|
55
|
+
m_entries = IO.read(file).split("\n")
|
56
|
+
assert_equal(entries.size, m_entries.size)
|
57
|
+
entries.each { |f|
|
58
|
+
assert(m_entries.include?(f),
|
59
|
+
"#{f} missing in manifest")
|
60
|
+
}
|
61
|
+
end
|
62
|
+
def test_tgz_from_manifest
|
63
|
+
assert_rant
|
64
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
65
|
+
dirs = %w(sub sub2)
|
66
|
+
check_contents(:tgz, "t1.tgz", mf, dirs, "MANIFEST")
|
67
|
+
end
|
68
|
+
def test_tgz_sync_manifest
|
69
|
+
assert_rant("t2.tgz")
|
70
|
+
mf = %w(sub/f1 sub2/f1 m2.tgz.t)
|
71
|
+
dirs = %w(sub sub2)
|
72
|
+
check_manifest("m2.tgz.t", mf)
|
73
|
+
check_contents(:tgz, "t2.tgz", mf, dirs, "m2.tgz.t")
|
74
|
+
out, err = assert_rant("t2.tgz")
|
75
|
+
assert(out.strip.empty?)
|
76
|
+
#assert(err.strip.empty?)
|
77
|
+
FileUtils.touch "sub/f5"
|
78
|
+
out, err = assert_rant("t2.tgz")
|
79
|
+
assert_match(/writing m2\.tgz\.t.*\n.*tar/m, out)
|
80
|
+
check_contents(:tgz, "t2.tgz", mf + %w(sub/f5), dirs, "m2.tgz.t")
|
81
|
+
timeout
|
82
|
+
FileUtils.rm "sub/f5"
|
83
|
+
out, err = assert_rant("t2.tgz")
|
84
|
+
assert_match(/writing m2\.tgz\.t.*\n.*tar/m, out)
|
85
|
+
check_contents(:tgz, "t2.tgz", mf, dirs, "m2.tgz.t")
|
86
|
+
# test autoclean
|
87
|
+
assert_rant("autoclean")
|
88
|
+
assert(!test(?e, "m2.tgz.t"))
|
89
|
+
# hmm.. the tgz will be removed by check_contents anyway...
|
90
|
+
assert(!test(?e, "t2.tgz"))
|
91
|
+
ensure
|
92
|
+
FileUtils.rm_rf "sub/f5"
|
93
|
+
end
|
94
|
+
def test_tgz_files_array
|
95
|
+
assert_rant("t3.tgz")
|
96
|
+
mf = %w(Rantfile sub/f1)
|
97
|
+
dirs = %w(sub)
|
98
|
+
check_contents(:tgz, "t3.tgz", mf, dirs)
|
99
|
+
end
|
100
|
+
def test_tgz_version_and_dir
|
101
|
+
assert_rant("pkg.t/t4-1.0.0.tgz")
|
102
|
+
assert(test(?d, "pkg.t"))
|
103
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
104
|
+
dirs = %w(sub sub2)
|
105
|
+
check_contents(:tgz, "pkg.t/t4-1.0.0.tgz", mf, dirs, "MANIFEST")
|
106
|
+
ensure
|
107
|
+
FileUtils.rm_rf "pkg.t"
|
108
|
+
end
|
109
|
+
def test_tgz_package_manifest
|
110
|
+
assert(!test(?e, "pkg2.t"))
|
111
|
+
assert_rant("pkg2.t.tgz")
|
112
|
+
assert(?d, "pkg2.t")
|
113
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
114
|
+
dirs = %w(sub sub2)
|
115
|
+
@pkg_dir = "pkg2.t"
|
116
|
+
check_contents(:tgz, "pkg2.t.tgz", mf, dirs, "MANIFEST")
|
117
|
+
assert(test(?d, "pkg2.t"))
|
118
|
+
assert_rant("autoclean")
|
119
|
+
assert(!test(?e, "pkg2.t"))
|
120
|
+
end
|
121
|
+
def test_tgz_package_basedir_manifest_extension
|
122
|
+
assert_rant("sub/pkg.t/pkg-0.1.tar.gz")
|
123
|
+
assert(test(?f, "sub/pkg.t/pkg-0.1.tar.gz"))
|
124
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
125
|
+
dirs = %w(sub sub2)
|
126
|
+
@pkg_dir = "pkg-0.1"
|
127
|
+
check_contents(:tgz,
|
128
|
+
"sub/pkg.t/pkg-0.1.tar.gz", mf, dirs, "MANIFEST")
|
129
|
+
assert(test(?f, "sub/f1"))
|
130
|
+
assert_rant("autoclean")
|
131
|
+
assert(!test(?e, "sub/pkg.t-0.1"))
|
132
|
+
assert(test(?d, "sub"))
|
133
|
+
assert(test(?f, "sub/f1"))
|
134
|
+
end
|
135
|
+
def test_tgz_package_basedir_with_slash
|
136
|
+
assert(!test(?d, "sub.t"))
|
137
|
+
assert_rant(:fail, "sub.t/pkg.tgz")
|
138
|
+
assert(!test(?d, "sub.t"))
|
139
|
+
FileUtils.mkdir "sub.t"
|
140
|
+
FileUtils.touch "sub.t/a.t"
|
141
|
+
out, err = assert_rant("sub.t/pkg.tgz")
|
142
|
+
assert(!out.empty?)
|
143
|
+
out, err = assert_rant("sub.t/pkg.tgz")
|
144
|
+
assert(out.empty?)
|
145
|
+
assert(test(?d, "sub.t/pkg"))
|
146
|
+
@pkg_dir = "pkg"
|
147
|
+
mf = %w(sub/f1)
|
148
|
+
dirs = %w(sub)
|
149
|
+
check_contents(:tgz, "sub.t/pkg.tgz", mf, dirs)
|
150
|
+
assert_rant("autoclean")
|
151
|
+
assert(!test(?e, "sub.t/pkg.tgz"))
|
152
|
+
assert(!test(?e, "sub.t/pkg"))
|
153
|
+
assert(test(?d, "sub.t"))
|
154
|
+
assert(test(?f, "sub.t/a.t"))
|
155
|
+
ensure
|
156
|
+
FileUtils.rm_rf "sub.t"
|
157
|
+
end
|
158
|
+
def test_tgz_import_archive
|
159
|
+
open "rf.t", "w" do |f|
|
160
|
+
f << <<-EOF
|
161
|
+
import "archive/tgz", "autoclean"
|
162
|
+
gen Archive::Tgz, "rf", :files => sys["deep/sub/sub/f1"]
|
163
|
+
gen AutoClean
|
164
|
+
EOF
|
165
|
+
end
|
166
|
+
assert_rant("-frf.t")
|
167
|
+
mf = %w(deep/sub/sub/f1)
|
168
|
+
dirs = %w(deep deep/sub deep/sub/sub)
|
169
|
+
check_contents(:tgz, "rf.tgz", mf, dirs)
|
170
|
+
assert(test(?f, "rf.tgz"))
|
171
|
+
assert_rant("-frf.t", "autoclean")
|
172
|
+
assert(!test(?e, "rf.tgz"))
|
173
|
+
run_import("-frf.t", "-q", "--auto", "ant.t")
|
174
|
+
assert_equal(0, $?.exitstatus)
|
175
|
+
out = run_ruby("ant.t", "-frf.t")
|
176
|
+
assert(!out.empty?)
|
177
|
+
out = run_ruby("ant.t", "-frf.t")
|
178
|
+
assert(out.empty?)
|
179
|
+
check_contents(:tgz, "rf.tgz", mf, dirs)
|
180
|
+
assert(test(?f, "rf.tgz"))
|
181
|
+
assert_rant("-frf.t", "autoclean")
|
182
|
+
assert(!test(?e, "rf.tgz"))
|
183
|
+
ensure
|
184
|
+
FileUtils.rm_rf %w(rf.t ant.t)
|
185
|
+
end
|
186
|
+
def test_tgz_package_empty_dir
|
187
|
+
FileUtils.mkdir "sub6.t"
|
188
|
+
assert_rant("t6.tgz")
|
189
|
+
@pkg_dir = "t6"
|
190
|
+
mf = %w()
|
191
|
+
dirs = %w(sub6.t)
|
192
|
+
check_contents(:tgz, "t6.tgz", mf, dirs)
|
193
|
+
ensure
|
194
|
+
FileUtils.rm_rf %w(sub6.t)
|
195
|
+
end
|
196
|
+
def test_tgz_files_manifest_desc
|
197
|
+
out, err = assert_rant("--tasks")
|
198
|
+
assert_match(/rant\s+t2\.tgz\s+#\s+Create t2\.tgz/, out)
|
199
|
+
end
|
200
|
+
def test_tgz_package_files_contains_manifest
|
201
|
+
assert_rant("t5.tgz")
|
202
|
+
@pkg_dir = "t5"
|
203
|
+
mf = %w(Rantfile mf5.t)
|
204
|
+
dirs = %w()
|
205
|
+
check_contents(:tgz, "t5.tgz", mf, dirs, "mf5.t")
|
206
|
+
assert_rant("autoclean")
|
207
|
+
assert(!test(?e, "t5"))
|
208
|
+
end
|
209
|
+
def test_tgz_package_non_recursive
|
210
|
+
FileUtils.mkdir "sub6.t"
|
211
|
+
FileUtils.touch "sub6.t/.t"
|
212
|
+
FileUtils.touch "sub6.t/a.t"
|
213
|
+
assert_rant("t6.tgz")
|
214
|
+
@pkg_dir = "t6"
|
215
|
+
mf = %w()
|
216
|
+
dirs = %w(sub6.t)
|
217
|
+
check_contents(:tgz, "t6.tgz", mf, dirs)
|
218
|
+
assert_rant("autoclean")
|
219
|
+
assert(!test(?e, "t6"))
|
220
|
+
ensure
|
221
|
+
FileUtils.rm_rf "sub6.t"
|
222
|
+
end
|
223
|
+
def test_tgz_non_recursive
|
224
|
+
FileUtils.mkdir "sub7.t"
|
225
|
+
FileUtils.touch "sub7.t/a"
|
226
|
+
assert_rant("t7.tgz")
|
227
|
+
mf = %w()
|
228
|
+
dirs = %w(sub7.t)
|
229
|
+
check_contents(:tgz, "t7.tgz", mf, dirs)
|
230
|
+
ensure
|
231
|
+
FileUtils.rm_rf "sub7.t"
|
232
|
+
end
|
233
|
+
def test_tgz_follow_symlink
|
234
|
+
have_symlinks = true
|
235
|
+
FileUtils.mkdir "subs.t"
|
236
|
+
open "target.t", "w" do |f|
|
237
|
+
f.print "symlink test target file"
|
238
|
+
end
|
239
|
+
begin
|
240
|
+
File.symlink "../target.t", "subs.t/symlink"
|
241
|
+
rescue NotImplementedError
|
242
|
+
have_symlinks = false
|
243
|
+
end
|
244
|
+
if have_symlinks
|
245
|
+
assert(File.symlink?("subs.t/symlink"))
|
246
|
+
assert(File.exist?("subs.t/symlink"))
|
247
|
+
assert_rant("sym.tgz")
|
248
|
+
mf = %w(subs.t/symlink)
|
249
|
+
dirs = %w(subs.t)
|
250
|
+
@contents["subs.t/symlink"] = "symlink test target file"
|
251
|
+
check_contents(:tgz, "sym.tgz", mf, dirs)
|
252
|
+
else
|
253
|
+
STDERR.puts "*** platform doesn't support symbolic links ***"
|
254
|
+
end
|
255
|
+
ensure
|
256
|
+
FileUtils.rm_f %w(target.t sym.tgz)
|
257
|
+
FileUtils.rm_rf "subs.t"
|
258
|
+
end
|
259
|
+
def test_tgz_package_follow_symlink_dir
|
260
|
+
have_symlinks = true
|
261
|
+
FileUtils.mkdir "subs.t"
|
262
|
+
begin
|
263
|
+
File.symlink "subs.t", "sub6.t"
|
264
|
+
rescue NotImplementedError
|
265
|
+
have_symlinks = false
|
266
|
+
end
|
267
|
+
if have_symlinks
|
268
|
+
assert_rant("t6.tgz")
|
269
|
+
@pkg_dir = "t6"
|
270
|
+
mf = %w()
|
271
|
+
dirs = %w(sub6.t)
|
272
|
+
check_contents(:tgz, "t6.tgz", mf, dirs)
|
273
|
+
end
|
274
|
+
ensure
|
275
|
+
FileUtils.rm_rf %w(subs.t sub6.t)
|
276
|
+
end
|
277
|
+
def test_zip_follow_symlink
|
278
|
+
have_symlinks = true
|
279
|
+
FileUtils.mkdir "subs.t"
|
280
|
+
open "target.t", "w" do |f|
|
281
|
+
f.print "symlink test target file"
|
282
|
+
end
|
283
|
+
begin
|
284
|
+
File.symlink "../target.t", "subs.t/symlink"
|
285
|
+
rescue NotImplementedError
|
286
|
+
have_symlinks = false
|
287
|
+
end
|
288
|
+
if have_symlinks
|
289
|
+
assert(File.symlink?("subs.t/symlink"))
|
290
|
+
assert(File.exist?("subs.t/symlink"))
|
291
|
+
assert_rant("sym.zip")
|
292
|
+
mf = %w(subs.t/symlink)
|
293
|
+
dirs = %w(subs.t)
|
294
|
+
@contents["subs.t/symlink"] = "symlink test target file"
|
295
|
+
check_contents(:zip, "sym.zip", mf, dirs)
|
296
|
+
else
|
297
|
+
STDERR.puts "*** platform doesn't support symbolic links ***"
|
298
|
+
end
|
299
|
+
ensure
|
300
|
+
FileUtils.rm_f %w(target.t sym.zip)
|
301
|
+
FileUtils.rm_rf "subs.t"
|
302
|
+
end
|
303
|
+
def test_zip_package_follow_symlink_dir
|
304
|
+
have_symlinks = true
|
305
|
+
FileUtils.mkdir "subs.t"
|
306
|
+
begin
|
307
|
+
File.symlink "subs.t", "sub6.t"
|
308
|
+
rescue NotImplementedError
|
309
|
+
have_symlinks = false
|
310
|
+
end
|
311
|
+
if have_symlinks
|
312
|
+
assert_rant("t6.zip")
|
313
|
+
@pkg_dir = "t6"
|
314
|
+
mf = %w()
|
315
|
+
dirs = %w(sub6.t)
|
316
|
+
check_contents(:zip, "t6.zip", mf, dirs)
|
317
|
+
end
|
318
|
+
ensure
|
319
|
+
FileUtils.rm_rf %w(subs.t sub6.t)
|
320
|
+
end
|
321
|
+
def test_zip_non_recursive
|
322
|
+
FileUtils.mkdir "sub7.t"
|
323
|
+
FileUtils.touch "sub7.t/a"
|
324
|
+
assert_rant("t7.zip")
|
325
|
+
mf = %w()
|
326
|
+
dirs = %w(sub7.t)
|
327
|
+
check_contents(:zip, "t7.zip", mf, dirs)
|
328
|
+
ensure
|
329
|
+
FileUtils.rm_rf "sub7.t"
|
330
|
+
end
|
331
|
+
def test_zip_package_non_recursive
|
332
|
+
FileUtils.mkdir "sub6.t"
|
333
|
+
FileUtils.touch "sub6.t/.t"
|
334
|
+
FileUtils.touch "sub6.t/a.t"
|
335
|
+
assert_rant("t6.zip")
|
336
|
+
@pkg_dir = "t6"
|
337
|
+
mf = %w()
|
338
|
+
dirs = %w(sub6.t)
|
339
|
+
check_contents(:zip, "t6.zip", mf, dirs)
|
340
|
+
assert_rant("autoclean")
|
341
|
+
assert(!test(?e, "t6"))
|
342
|
+
ensure
|
343
|
+
FileUtils.rm_rf "sub6.t"
|
344
|
+
end
|
345
|
+
def test_zip_package_empty_dir
|
346
|
+
FileUtils.mkdir "sub6.t"
|
347
|
+
assert_rant("t6.zip")
|
348
|
+
@pkg_dir = "t6"
|
349
|
+
mf = %w()
|
350
|
+
dirs = %w(sub6.t)
|
351
|
+
check_contents(:zip, "t6.zip", mf, dirs)
|
352
|
+
ensure
|
353
|
+
FileUtils.rm_rf %w(sub6.t)
|
354
|
+
end
|
355
|
+
def test_zip_manifest_desc
|
356
|
+
out, err = assert_rant("--tasks")
|
357
|
+
assert_match(/rant\s+t1\.zip\s+#\s+Create t1\.zip/, out)
|
358
|
+
end
|
359
|
+
def test_zip_rant_import
|
360
|
+
run_import("-q", "--auto", "ant.t")
|
361
|
+
assert_equal(0, $?.exitstatus)
|
362
|
+
assert(test(?f, "ant.t"))
|
363
|
+
out = run_ruby("ant.t", "pkg.t/pkg.zip")
|
364
|
+
assert_equal(0, $?.exitstatus)
|
365
|
+
assert(!out.empty?)
|
366
|
+
out = run_ruby("ant.t", "pkg.t/pkg.zip")
|
367
|
+
assert(out.empty?)
|
368
|
+
mf = %w(deep/sub/sub/f1 CONTENTS)
|
369
|
+
dirs = %w(deep deep/sub deep/sub/sub)
|
370
|
+
@pkg_dir = "pkg"
|
371
|
+
check_contents(:zip, "pkg.t/pkg.zip", mf, dirs, "CONTENTS")
|
372
|
+
assert(test(?f, "CONTENTS"))
|
373
|
+
run_ruby("ant.t", "autoclean")
|
374
|
+
assert(!test(?f, "CONTENTS"))
|
375
|
+
ensure
|
376
|
+
FileUtils.rm_f "ant.t"
|
377
|
+
end
|
378
|
+
def test_zip_package_write_manifest
|
379
|
+
assert(!test(?f, "CONTENTS"))
|
380
|
+
assert_rant(:x, "pkg.t/pkg.zip")
|
381
|
+
assert(test(?f, "CONTENTS"))
|
382
|
+
mf = %w(deep/sub/sub/f1 CONTENTS)
|
383
|
+
dirs = %w(deep deep/sub deep/sub/sub)
|
384
|
+
@pkg_dir = "pkg"
|
385
|
+
check_contents(:zip, "pkg.t/pkg.zip", mf, dirs, "CONTENTS")
|
386
|
+
assert(test(?f, "CONTENTS"))
|
387
|
+
assert_rant("autoclean")
|
388
|
+
assert(!test(?f, "CONTENTS"))
|
389
|
+
end
|
390
|
+
def test_zip_with_basedir
|
391
|
+
assert_rant(:fail, "zip.t/t4-1.0.0.zip")
|
392
|
+
assert(!test(?d, "zip.t"))
|
393
|
+
FileUtils.mkdir "zip.t"
|
394
|
+
assert_rant(:x, "zip.t/t4-1.0.0.zip")
|
395
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
396
|
+
dirs = %w(sub sub2)
|
397
|
+
check_contents(:zip, "zip.t/t4-1.0.0.zip", mf, dirs, "MANIFEST")
|
398
|
+
assert_rant("autoclean")
|
399
|
+
assert(test(?d, "zip.t"))
|
400
|
+
assert(!test(?e, "zip.t/t4-1.0.0.zip"))
|
401
|
+
ensure
|
402
|
+
FileUtils.rm_rf "zip.t"
|
403
|
+
end
|
404
|
+
def test_zip_from_manifest
|
405
|
+
assert_rant(:x, "t1.zip")
|
406
|
+
mf = %w(Rantfile sub/f1 sub2/f1 MANIFEST)
|
407
|
+
dirs = %w(sub sub2)
|
408
|
+
check_contents(:zip, "t1.zip", mf, dirs, "MANIFEST")
|
409
|
+
end
|
410
|
+
def test_zip_sync_manifest
|
411
|
+
assert_rant(:x, "t2.zip")
|
412
|
+
mf = %w(sub/f1 sub2/f1 m2.zip.t)
|
413
|
+
dirs = %w(sub sub2)
|
414
|
+
check_manifest("m2.zip.t", mf)
|
415
|
+
check_contents(:zip, "t2.zip", mf, dirs, "m2.zip.t")
|
416
|
+
ensure
|
417
|
+
FileUtils.rm_f "m2.zip.t"
|
418
|
+
end
|
419
|
+
def test_zip_filelist
|
420
|
+
assert_rant(:x, "t3.zip")
|
421
|
+
mf = %w(Rantfile sub/f1)
|
422
|
+
dirs = %w(sub)
|
423
|
+
check_contents(:zip, "t3.zip", mf, dirs)
|
424
|
+
end
|
425
|
+
end
|
@@ -71,6 +71,18 @@ class TestSubFile < Test::Unit::TestCase
|
|
71
71
|
out, err = assert_rant("file.t")
|
72
72
|
assert(out.strip.empty?)
|
73
73
|
end
|
74
|
+
def test_dependency
|
75
|
+
FileUtils.mkdir "sub.t"
|
76
|
+
assert_rant("sub.t/sub/file")
|
77
|
+
assert(test(?f, "file.t"))
|
78
|
+
assert(test(?f, "sub.t/sub/file"))
|
79
|
+
end
|
80
|
+
def test_dependencies
|
81
|
+
assert_rant("a.t")
|
82
|
+
assert(test(?f, "file.t"))
|
83
|
+
assert(test(?f, "sub.t/file2"))
|
84
|
+
assert(test(?f, "a.t"))
|
85
|
+
end
|
74
86
|
def test_autoclean
|
75
87
|
assert_rant("-fautoclean.rf", "sub.t/file")
|
76
88
|
assert(test(?f, "sub.t/file"))
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import %w(rubytest rubydoc rubypackage)
|
1
|
+
import %w(rubytest rubydoc rubypackage clean)
|
2
2
|
|
3
3
|
lib_files = Dir["lib/**/*.rb"]
|
4
4
|
dist_files = lib_files + %w(rantfile.rb README test_project_rb1.rb) + Dir["{test,bin}/*"]
|
@@ -25,6 +25,5 @@ gen RubyPackage, :wgrep do |t|
|
|
25
25
|
t.package_task "pkg"
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
end
|
28
|
+
gen Clean
|
29
|
+
var[:clean].include "doc", "packages", "*~"
|