ratch 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby +99 -0
- data/COPYING +203 -21
- data/History.rdoc +35 -0
- data/License.txt +204 -0
- data/README.rdoc +113 -0
- data/Version +1 -0
- data/bin/ludo +16 -0
- data/bin/ratch +1 -8
- data/lib/ratch.rb +28 -0
- data/lib/ratch.yml +99 -0
- data/lib/ratch/batch.rb +500 -0
- data/lib/ratch/console.rb +199 -0
- data/lib/ratch/core_ext.rb +1 -4
- data/lib/ratch/core_ext/facets.rb +15 -1
- data/lib/ratch/core_ext/filetest.rb +29 -0
- data/lib/ratch/core_ext/{string.rb → to_actual_filename.rb} +0 -23
- data/lib/ratch/core_ext/to_console.rb +30 -12
- data/lib/ratch/core_ext/{object.rb → to_yamlfrag.rb} +1 -0
- data/lib/ratch/core_ext/unfold_paragraphs.rb +27 -0
- data/lib/ratch/file_list.rb +411 -0
- data/lib/ratch/script.rb +99 -5
- data/lib/ratch/script/help.rb +84 -0
- data/lib/ratch/shell.rb +783 -0
- data/lib/ratch/system.rb +15 -0
- data/lib/ratch/utils/cli.rb +49 -0
- data/lib/ratch/utils/config.rb +52 -0
- data/lib/ratch/{emailer.rb → utils/email.rb} +43 -6
- data/lib/ratch/utils/ftp.rb +134 -0
- data/lib/ratch/utils/pom.rb +22 -0
- data/lib/ratch/utils/rdoc.rb +48 -0
- data/lib/ratch/utils/tar.rb +88 -0
- data/lib/ratch/utils/xdg.rb +39 -0
- data/lib/ratch/utils/zlib.rb +54 -0
- data/spec/01_shell.rdoc +198 -0
- data/spec/02_script.rdoc +34 -0
- data/spec/03_batch.rdoc +71 -0
- data/spec/04_system.rdoc +3 -0
- data/spec/applique/array.rb +8 -0
- data/spec/applique/setup.rb +20 -0
- data/test/case_batch.rb +63 -0
- data/test/case_shell.rb +46 -0
- data/test/core_ext/case_pathname.rb +361 -0
- data/test/helper.rb +4 -0
- data/test/utils/case_cli.rb +6 -0
- data/test/utils/case_config.rb +12 -0
- data/test/utils/case_email.rb +10 -0
- data/test/utils/case_ftp.rb +6 -0
- data/test/utils/case_pom.rb +17 -0
- data/test/utils/case_rdoc.rb +23 -0
- data/test/utils/case_tar.rb +6 -0
- data/test/utils/case_zlib.rb +11 -0
- data/test/utils/fixtures/pom_sample/Profile +4 -0
- data/test/utils/fixtures/rdoc_sample/README.rdoc +4 -0
- data/test/utils/fixtures/rdoc_sample/lib/rdoc_sample/rdoc_sample.rb +9 -0
- metadata +139 -82
- data/HISTORY +0 -6
- data/MANIFEST +0 -53
- data/NEWS +0 -12
- data/README +0 -87
- data/VERSION +0 -1
- data/demo/tryme-task.ratch +0 -12
- data/demo/tryme1.ratch +0 -6
- data/doc/log/basic_stats/index.html +0 -39
- data/doc/log/notes.xml +0 -18
- data/doc/log/stats.log +0 -14
- data/doc/log/syntax.log +0 -0
- data/doc/log/testunit.log +0 -156
- data/lib/ratch/commandline.rb +0 -16
- data/lib/ratch/core_ext/pathname.rb +0 -38
- data/lib/ratch/dsl.rb +0 -420
- data/lib/ratch/index.rb +0 -4
- data/lib/ratch/io.rb +0 -116
- data/lib/ratch/plugin.rb +0 -65
- data/lib/ratch/service.rb +0 -33
- data/lib/ratch/task.rb +0 -249
- data/lib/ratch/task2.rb +0 -298
- data/meta/abstract +0 -4
- data/meta/author +0 -1
- data/meta/contact +0 -1
- data/meta/homepage +0 -1
- data/meta/name +0 -1
- data/meta/requires +0 -4
- data/meta/summary +0 -1
- data/test/README +0 -1
- data/test/test_helper.rb +0 -4
- data/test/test_task.rb +0 -46
data/test/case_shell.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'ratch/shell'
|
2
|
+
|
3
|
+
KO.case 'Shell' do
|
4
|
+
|
5
|
+
test 'with no path given current working directory is used' do
|
6
|
+
sh = Ratch::Shell.new
|
7
|
+
sh.work == Pathname.new(Dir.pwd)
|
8
|
+
end
|
9
|
+
|
10
|
+
test :quiet? do |options|
|
11
|
+
o = Hash[*options]
|
12
|
+
sh = Ratch::Shell.new(o)
|
13
|
+
sh.quiet?
|
14
|
+
end
|
15
|
+
|
16
|
+
ok [:quiet, true]
|
17
|
+
|
18
|
+
test :trace? do |options|
|
19
|
+
o = Hash[*options]
|
20
|
+
sh = Ratch::Shell.new(o)
|
21
|
+
sh.trace?
|
22
|
+
end
|
23
|
+
|
24
|
+
ok [:trace, true]
|
25
|
+
|
26
|
+
test :noop? do |options|
|
27
|
+
o = Hash[*options]
|
28
|
+
sh = Ratch::Shell.new(o)
|
29
|
+
sh.noop?
|
30
|
+
end
|
31
|
+
|
32
|
+
ok [:noop, true]
|
33
|
+
|
34
|
+
test :dryrun? do |options|
|
35
|
+
o = Hash[*options]
|
36
|
+
sh = Ratch::Shell.new(o)
|
37
|
+
sh.dryrun?
|
38
|
+
end
|
39
|
+
|
40
|
+
ok [:noop, true, :trace, true]
|
41
|
+
ok [:dryrun, true]
|
42
|
+
|
43
|
+
no [:noop, true]
|
44
|
+
no [:verbose, true]
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,361 @@
|
|
1
|
+
require 'ratch/core_ext'
|
2
|
+
|
3
|
+
# Test the Pathname extensions.
|
4
|
+
KO.case 'Pathname' do
|
5
|
+
|
6
|
+
# Test some standard pathname features to ensure nothing is screwed up.
|
7
|
+
|
8
|
+
test :initialize do
|
9
|
+
p1 = Pathname.new('a')
|
10
|
+
p2 = Pathname.new(p1)
|
11
|
+
p1 == p2 && 'a' == p1.to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
test :== do |obj2|
|
15
|
+
obj1 = Pathname.new("a")
|
16
|
+
obj2 = Pathname.new("a")
|
17
|
+
obj1 == obj2
|
18
|
+
end
|
19
|
+
|
20
|
+
test :=== do
|
21
|
+
obj1 = Pathname.new("a")
|
22
|
+
obj2 = Pathname.new("a")
|
23
|
+
obj1 === obj2
|
24
|
+
end
|
25
|
+
|
26
|
+
test :eql? do
|
27
|
+
obj1 = Pathname.new("a")
|
28
|
+
obj2 = Pathname.new("a")
|
29
|
+
obj1.eql?(obj2)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
class AnotherStringLike # :nodoc:
|
34
|
+
def initialize(s) @s = s end
|
35
|
+
def to_str() @s end
|
36
|
+
def ==(other) @s == other end
|
37
|
+
end
|
38
|
+
|
39
|
+
test 'equality' do
|
40
|
+
obj = Pathname.new("a")
|
41
|
+
str = "a"
|
42
|
+
sym = :a
|
43
|
+
ano = AnotherStringLike.new("a")
|
44
|
+
return false if obj == str
|
45
|
+
return false if str == obj
|
46
|
+
return false if obj == ano
|
47
|
+
return false if ano == obj
|
48
|
+
return false if obj == sym
|
49
|
+
return false if sym == obj
|
50
|
+
return true
|
51
|
+
end
|
52
|
+
|
53
|
+
test :hash do
|
54
|
+
h = {}
|
55
|
+
h[Pathname.new("a")] = 1
|
56
|
+
h[Pathname.new("a")] = 2
|
57
|
+
h.size == 1
|
58
|
+
end
|
59
|
+
|
60
|
+
test :<=> do |e, s1, s2|
|
61
|
+
p1 = Pathname.new(s1)
|
62
|
+
p2 = Pathname.new(s2)
|
63
|
+
e == (p1 <=> p2)
|
64
|
+
end
|
65
|
+
|
66
|
+
ok 0, "a", "a"
|
67
|
+
ok 1, "b", "a"
|
68
|
+
ok -1, "a", "b"
|
69
|
+
|
70
|
+
ok -1, "a", "a/"
|
71
|
+
ok -1, "a/", "a/b"
|
72
|
+
ok -1, "a/b", "a."
|
73
|
+
ok -1, "a.", "a0"
|
74
|
+
|
75
|
+
test :<=> do
|
76
|
+
(Pathname.new("a") <=> "a").nil? &&
|
77
|
+
("a" <=> Pathname.new("a")).nil?
|
78
|
+
end
|
79
|
+
|
80
|
+
test :root do |a|
|
81
|
+
Pathname.new(a).root?
|
82
|
+
end
|
83
|
+
|
84
|
+
ok '/'
|
85
|
+
ok '//'
|
86
|
+
ok '///'
|
87
|
+
|
88
|
+
no ''
|
89
|
+
no 'a'
|
90
|
+
|
91
|
+
test :to_s do |a,b|
|
92
|
+
a == Pathname.new(b).to_s
|
93
|
+
end
|
94
|
+
|
95
|
+
ok '/' , '/'
|
96
|
+
ok 'a/', 'a/'
|
97
|
+
ok '/a', '/a'
|
98
|
+
ok '.' , '.'
|
99
|
+
ok '..', '..'
|
100
|
+
|
101
|
+
test :cleanpath do |a,b|
|
102
|
+
a == Pathname.new(b).cleanpath(true).to_s
|
103
|
+
end
|
104
|
+
|
105
|
+
ok '/' , '/'
|
106
|
+
ok '/' , '//'
|
107
|
+
ok '/' , '/.'
|
108
|
+
ok '/' , '/..'
|
109
|
+
ok '/', '/./..'
|
110
|
+
ok '/', '/../.'
|
111
|
+
ok '/', '/./../'
|
112
|
+
ok '/', '/.././'
|
113
|
+
|
114
|
+
ok '.' , '.'
|
115
|
+
ok '.' , './'
|
116
|
+
|
117
|
+
ok '..', '..'
|
118
|
+
ok '..', '../'
|
119
|
+
ok '..', './..'
|
120
|
+
ok '..', '../.'
|
121
|
+
ok '..', './../'
|
122
|
+
ok '..', '.././'
|
123
|
+
|
124
|
+
ok 'a' , 'a'
|
125
|
+
ok 'a/' , 'a/'
|
126
|
+
ok 'a/.' , 'a/.'
|
127
|
+
ok 'a/.' , 'a/./'
|
128
|
+
ok 'a/..', 'a/../'
|
129
|
+
ok 'a/..', 'a/../.'
|
130
|
+
|
131
|
+
ok '/a' , '/a'
|
132
|
+
ok '/a/.', '/a/.'
|
133
|
+
|
134
|
+
ok 'a/b' , 'a//b'
|
135
|
+
ok 'a/b/c', 'a/b/c'
|
136
|
+
ok 'b/c' , './b/c'
|
137
|
+
ok 'a/c' , 'a/./c'
|
138
|
+
ok 'a/b/.', 'a/b/.'
|
139
|
+
|
140
|
+
ok '/a', '/../.././../a'
|
141
|
+
ok 'a/b/../../../../c/../d', 'a/b/../../../../c/../d'
|
142
|
+
|
143
|
+
=begin
|
144
|
+
def test_cleanpath_no_symlink
|
145
|
+
assert_equal('/', Pathname.new('/').cleanpath.to_s)
|
146
|
+
assert_equal('/', Pathname.new('//').cleanpath.to_s)
|
147
|
+
assert_equal('', Pathname.new('').cleanpath.to_s)
|
148
|
+
|
149
|
+
assert_equal('.', Pathname.new('.').cleanpath.to_s)
|
150
|
+
assert_equal('..', Pathname.new('..').cleanpath.to_s)
|
151
|
+
assert_equal('a', Pathname.new('a').cleanpath.to_s)
|
152
|
+
assert_equal('/', Pathname.new('/.').cleanpath.to_s)
|
153
|
+
assert_equal('/', Pathname.new('/..').cleanpath.to_s)
|
154
|
+
assert_equal('/a', Pathname.new('/a').cleanpath.to_s)
|
155
|
+
assert_equal('.', Pathname.new('./').cleanpath.to_s)
|
156
|
+
assert_equal('..', Pathname.new('../').cleanpath.to_s)
|
157
|
+
assert_equal('a', Pathname.new('a/').cleanpath.to_s)
|
158
|
+
|
159
|
+
assert_equal('a/b', Pathname.new('a//b').cleanpath.to_s)
|
160
|
+
assert_equal('a', Pathname.new('a/.').cleanpath.to_s)
|
161
|
+
assert_equal('a', Pathname.new('a/./').cleanpath.to_s)
|
162
|
+
assert_equal('.', Pathname.new('a/../').cleanpath.to_s)
|
163
|
+
assert_equal('/a', Pathname.new('/a/.').cleanpath.to_s)
|
164
|
+
assert_equal('..', Pathname.new('./..').cleanpath.to_s)
|
165
|
+
assert_equal('..', Pathname.new('../.').cleanpath.to_s)
|
166
|
+
assert_equal('..', Pathname.new('./../').cleanpath.to_s)
|
167
|
+
assert_equal('..', Pathname.new('.././').cleanpath.to_s)
|
168
|
+
assert_equal('/', Pathname.new('/./..').cleanpath.to_s)
|
169
|
+
assert_equal('/', Pathname.new('/../.').cleanpath.to_s)
|
170
|
+
assert_equal('/', Pathname.new('/./../').cleanpath.to_s)
|
171
|
+
assert_equal('/', Pathname.new('/.././').cleanpath.to_s)
|
172
|
+
return false unless obj.equal? obj.taint
|
173
|
+
assert_equal('a/b/c', Pathname.new('a/b/c').cleanpath.to_s)
|
174
|
+
assert_equal('b/c', Pathname.new('./b/c').cleanpath.to_s)
|
175
|
+
assert_equal('a/c', Pathname.new('a/./c').cleanpath.to_s)
|
176
|
+
assert_equal('a/b', Pathname.new('a/b/.').cleanpath.to_s)
|
177
|
+
assert_equal('.', Pathname.new('a/../.').cleanpath.to_s)
|
178
|
+
|
179
|
+
assert_equal('/a', Pathname.new('/../.././../a').cleanpath.to_s)
|
180
|
+
assert_equal('../../d', Pathname.new('a/b/../../../../c/../d').cleanpath.to_s)
|
181
|
+
end
|
182
|
+
=end
|
183
|
+
|
184
|
+
=begin
|
185
|
+
def test_destructive_update
|
186
|
+
path = Pathname.new("a")
|
187
|
+
path.to_s.replace "b"
|
188
|
+
assert_equal(Pathname.new("a"), path)
|
189
|
+
end
|
190
|
+
=end
|
191
|
+
|
192
|
+
#def test_null_character
|
193
|
+
# assert_raise(ArgumentError) { Pathname.new("\0") }
|
194
|
+
#end
|
195
|
+
|
196
|
+
test :relative_path_from do |result, dest, base|
|
197
|
+
Pathname.new(result) == Pathname.new(dest).relative_path_from(Pathname.new(base))
|
198
|
+
end
|
199
|
+
|
200
|
+
ok "../a", "a", "b"
|
201
|
+
ok "../a", "a", "b/"
|
202
|
+
ok "../a", "a/", "b"
|
203
|
+
ok "../a", "a/", "b/"
|
204
|
+
ok "../a", "/a", "/b"
|
205
|
+
ok "../a", "/a", "/b/"
|
206
|
+
ok "../a", "/a/", "/b"
|
207
|
+
ok "../a", "/a/", "/b/"
|
208
|
+
|
209
|
+
ok "../b", "a/b", "a/c"
|
210
|
+
ok "../a", "../a", "../b"
|
211
|
+
|
212
|
+
ok "a", "a", "."
|
213
|
+
ok "..", ".", "a"
|
214
|
+
|
215
|
+
ok ".", ".", "."
|
216
|
+
ok ".", "..", ".."
|
217
|
+
ok "..", "..", "."
|
218
|
+
|
219
|
+
ok "c/d", "/a/b/c/d", "/a/b"
|
220
|
+
ok "../..", "/a/b", "/a/b/c/d"
|
221
|
+
ok "../../../../e", "/e", "/a/b/c/d"
|
222
|
+
ok "../b/c", "a/b/c", "a/d"
|
223
|
+
|
224
|
+
ok "../a", "/../a", "/b"
|
225
|
+
ok "../../a", "../a", "b"
|
226
|
+
ok ".", "/a/../../b", "/b"
|
227
|
+
ok "..", "a/..", "a"
|
228
|
+
ok ".", "a/../b", "b"
|
229
|
+
|
230
|
+
ok "a", "a", "b/.."
|
231
|
+
ok "b/c", "b/c", "b/.."
|
232
|
+
|
233
|
+
test :relative_path_from do |dest, base|
|
234
|
+
ArgumentError.raised? {
|
235
|
+
Pathname.new(dest).relative_path_from(Pathname.new(base))
|
236
|
+
}
|
237
|
+
end
|
238
|
+
|
239
|
+
ok "/", "."
|
240
|
+
ok ".", "/"
|
241
|
+
ok "a", ".."
|
242
|
+
ok ".", ".."
|
243
|
+
|
244
|
+
test :+ do |a, b, c|
|
245
|
+
a = Pathname.new(a)
|
246
|
+
b = Pathname.new(b)
|
247
|
+
c = Pathname.new(c)
|
248
|
+
a == b + c
|
249
|
+
end
|
250
|
+
|
251
|
+
ok 'a/b', 'a', 'b'
|
252
|
+
ok 'a', 'a', '.'
|
253
|
+
ok 'b', '.', 'b'
|
254
|
+
ok '.', '.', '.'
|
255
|
+
|
256
|
+
ok '/', '/', '..'
|
257
|
+
ok '.', 'a', '..'
|
258
|
+
ok 'a', 'a/b', '..'
|
259
|
+
ok '../..', '..', '..'
|
260
|
+
ok '/c', '/', '../c'
|
261
|
+
ok 'c', 'a', '../c'
|
262
|
+
ok 'a/c', 'a/b', '../c'
|
263
|
+
ok '../../c', '..', '../c'
|
264
|
+
|
265
|
+
# TODO: Is this really what we want?
|
266
|
+
ok '/b', 'a', '/b'
|
267
|
+
|
268
|
+
test :taint do
|
269
|
+
obj = Pathname.new("a")
|
270
|
+
obj.equal? obj.taint
|
271
|
+
end
|
272
|
+
|
273
|
+
test :untaint do
|
274
|
+
obj = Pathname.new("a")
|
275
|
+
obj.equal? obj.untaint
|
276
|
+
end
|
277
|
+
|
278
|
+
test :tainted? do
|
279
|
+
return false if Pathname.new("a").tainted?
|
280
|
+
return false if Pathname.new("a").to_s.tainted?
|
281
|
+
true
|
282
|
+
end
|
283
|
+
|
284
|
+
test :tainted? do
|
285
|
+
Pathname.new("a" ).taint.tainted? &&
|
286
|
+
Pathname.new("a" ).taint.to_s.tainted? &&
|
287
|
+
Pathname.new("a".taint) .tainted? &&
|
288
|
+
Pathname.new("a".taint) .to_s.tainted? &&
|
289
|
+
Pathname.new("a".taint).taint .tainted? &&
|
290
|
+
Pathname.new("a".taint).taint.to_s.tainted?
|
291
|
+
end
|
292
|
+
|
293
|
+
test :tainted? do
|
294
|
+
str = "a"
|
295
|
+
path = Pathname.new(str)
|
296
|
+
str.taint
|
297
|
+
return false if path.tainted?
|
298
|
+
return false if path.to_s.tainted?
|
299
|
+
return true
|
300
|
+
end
|
301
|
+
|
302
|
+
test :tainted? do
|
303
|
+
!Pathname.new("a").taint.untaint .tainted? &&
|
304
|
+
!Pathname.new("a").taint.untaint.to_s.tainted?
|
305
|
+
end
|
306
|
+
|
307
|
+
test :tainted? do
|
308
|
+
str = "a".taint
|
309
|
+
path = Pathname.new(str)
|
310
|
+
str.untaint
|
311
|
+
path.tainted? && path.to_s.tainted?
|
312
|
+
end
|
313
|
+
|
314
|
+
test :freeze do
|
315
|
+
obj = Pathname.new("a")
|
316
|
+
obj.equal? obj.freeze
|
317
|
+
end
|
318
|
+
|
319
|
+
test :freeze do
|
320
|
+
Pathname.new("a" ).freeze.frozen? &&
|
321
|
+
Pathname.new("a".freeze).freeze.frozen?
|
322
|
+
end
|
323
|
+
|
324
|
+
test :freeze do
|
325
|
+
not (
|
326
|
+
Pathname.new("a" ) .frozen? &&
|
327
|
+
Pathname.new("a".freeze) .frozen? &&
|
328
|
+
Pathname.new("a" ) .to_s.frozen? &&
|
329
|
+
Pathname.new("a".freeze) .to_s.frozen? &&
|
330
|
+
Pathname.new("a" ).freeze.to_s.frozen? &&
|
331
|
+
Pathname.new("a".freeze).freeze.to_s.frozen?
|
332
|
+
)
|
333
|
+
end
|
334
|
+
|
335
|
+
test :to_s do
|
336
|
+
str = "a"
|
337
|
+
obj = Pathname.new(str)
|
338
|
+
str == obj.to_s &&
|
339
|
+
!str.equal?(obj.to_s) &&
|
340
|
+
!obj.to_s.equal?(obj.to_s)
|
341
|
+
end
|
342
|
+
|
343
|
+
=begin
|
344
|
+
test "kernel open" do
|
345
|
+
count = 0
|
346
|
+
stat1 = File.stat(__FILE__)
|
347
|
+
result = Kernel.open(Pathname.new(__FILE__)) do |f|
|
348
|
+
stat2 = f.stat
|
349
|
+
assert_equal(stat1.dev, stat2.dev)
|
350
|
+
assert_equal(stat1.ino, stat2.ino)
|
351
|
+
assert_equal(stat1.size, stat2.size)
|
352
|
+
count += 1
|
353
|
+
2
|
354
|
+
end
|
355
|
+
assert_equal(1, count)
|
356
|
+
assert_equal(2, result)
|
357
|
+
end
|
358
|
+
=end
|
359
|
+
|
360
|
+
end
|
361
|
+
|
data/test/helper.rb
ADDED