YkLib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/YkLib.gemspec +29 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/YkLib/Yk/__advance__.rb +151 -0
  15. data/lib/YkLib/Yk/__defun__.rb +44 -0
  16. data/lib/YkLib/Yk/__hook__.rb +244 -0
  17. data/lib/YkLib/Yk/__minmax__.rb +123 -0
  18. data/lib/YkLib/Yk/__stdlog.rb +329 -0
  19. data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
  20. data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
  21. data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
  22. data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
  23. data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
  24. data/lib/YkLib/Yk/auto_escseq.rb +5 -0
  25. data/lib/YkLib/Yk/auto_pstore.rb +179 -0
  26. data/lib/YkLib/Yk/bsearch.rb +120 -0
  27. data/lib/YkLib/Yk/clambda.rb +309 -0
  28. data/lib/YkLib/Yk/confLine.rb +423 -0
  29. data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
  30. data/lib/YkLib/Yk/crypt.rb +26 -0
  31. data/lib/YkLib/Yk/debug2 +1 -0
  32. data/lib/YkLib/Yk/debug2.rb +473 -0
  33. data/lib/YkLib/Yk/debugout.rb +139 -0
  34. data/lib/YkLib/Yk/email_tz.rb +533 -0
  35. data/lib/YkLib/Yk/enum_expect.rb +170 -0
  36. data/lib/YkLib/Yk/errlog.rb +5 -0
  37. data/lib/YkLib/Yk/escseq.rb +59 -0
  38. data/lib/YkLib/Yk/eval_alt.rb +281 -0
  39. data/lib/YkLib/Yk/expector.rb +93 -0
  40. data/lib/YkLib/Yk/fetch.rb +556 -0
  41. data/lib/YkLib/Yk/fetch_old.rb +290 -0
  42. data/lib/YkLib/Yk/fib.rb +158 -0
  43. data/lib/YkLib/Yk/file_aux.rb +843 -0
  44. data/lib/YkLib/Yk/file_aux2.rb +919 -0
  45. data/lib/YkLib/Yk/file_aux_old.rb +160 -0
  46. data/lib/YkLib/Yk/filemod.rb +19 -0
  47. data/lib/YkLib/Yk/force_escseq.rb +3 -0
  48. data/lib/YkLib/Yk/generator__.rb +144 -0
  49. data/lib/YkLib/Yk/generator__.rb.org +139 -0
  50. data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
  51. data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
  52. data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
  53. data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
  54. data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
  55. data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
  56. data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
  57. data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
  58. data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
  59. data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
  60. data/lib/YkLib/Yk/indenter/token.rb +1525 -0
  61. data/lib/YkLib/Yk/indenter.rb +1382 -0
  62. data/lib/YkLib/Yk/inot.rb +265 -0
  63. data/lib/YkLib/Yk/intf.rb +815 -0
  64. data/lib/YkLib/Yk/io_aux.rb +1332 -0
  65. data/lib/YkLib/Yk/ioctl.rb +60 -0
  66. data/lib/YkLib/Yk/ipcc.rb +87 -0
  67. data/lib/YkLib/Yk/ipcountry.rb +207 -0
  68. data/lib/YkLib/Yk/ipv4adr.rb +318 -0
  69. data/lib/YkLib/Yk/localmail.rb +276 -0
  70. data/lib/YkLib/Yk/method_chain.rb +359 -0
  71. data/lib/YkLib/Yk/misc_tz.rb +1716 -0
  72. data/lib/YkLib/Yk/missing_method.rb +50 -0
  73. data/lib/YkLib/Yk/mojiConv.rb +257 -0
  74. data/lib/YkLib/Yk/nostdlog.rb +4 -0
  75. data/lib/YkLib/Yk/on_marshal.rb +20 -0
  76. data/lib/YkLib/Yk/overrider.rb +47 -0
  77. data/lib/YkLib/Yk/path.rb +293 -0
  78. data/lib/YkLib/Yk/path_aux.rb +883 -0
  79. data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
  80. data/lib/YkLib/Yk/path_rep.rb +1267 -0
  81. data/lib/YkLib/Yk/pg_setup.rb +917 -0
  82. data/lib/YkLib/Yk/procinfo.rb +314 -0
  83. data/lib/YkLib/Yk/proclist.rb +492 -0
  84. data/lib/YkLib/Yk/property.rb +863 -0
  85. data/lib/YkLib/Yk/ranger.rb +606 -0
  86. data/lib/YkLib/Yk/resolv_tz.rb +88 -0
  87. data/lib/YkLib/Yk/rlprompt.rb +73 -0
  88. data/lib/YkLib/Yk/rootexec.rb +48 -0
  89. data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
  90. data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
  91. data/lib/YkLib/Yk/rwhen.rb +21 -0
  92. data/lib/YkLib/Yk/selector.rb +124 -0
  93. data/lib/YkLib/Yk/set.rb +170 -0
  94. data/lib/YkLib/Yk/shellquote.rb +300 -0
  95. data/lib/YkLib/Yk/sio.rb +1001 -0
  96. data/lib/YkLib/Yk/sio0.rb +835 -0
  97. data/lib/YkLib/Yk/sio_aux.rb +1524 -0
  98. data/lib/YkLib/Yk/sio_inot.rb +86 -0
  99. data/lib/YkLib/Yk/sock_aux.rb +42 -0
  100. data/lib/YkLib/Yk/spipe.rb +843 -0
  101. data/lib/YkLib/Yk/sql_table.rb +565 -0
  102. data/lib/YkLib/Yk/stdlog.rb +4 -0
  103. data/lib/YkLib/Yk/syscommand.rb +173 -0
  104. data/lib/YkLib/Yk/sysinit.rb +75 -0
  105. data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
  106. data/lib/YkLib/Yk/tty_char.dump +0 -0
  107. data/lib/YkLib/Yk/tty_char.rb +47 -0
  108. data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
  109. data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
  110. data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
  111. data/lib/YkLib/Yk/tty_str.rb +461 -0
  112. data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
  113. data/lib/YkLib/Yk/tty_width.rb +180 -0
  114. data/lib/YkLib/Yk/tty_width_available +569 -0
  115. data/lib/YkLib/Yk/tty_width_list +0 -0
  116. data/lib/YkLib/Yk/tty_width_list.linux +280 -0
  117. data/lib/YkLib/Yk/tty_width_list.windows +324 -0
  118. data/lib/YkLib/Yk/tz_tty +0 -0
  119. data/lib/YkLib/Yk/tz_tty.rb +0 -0
  120. data/lib/YkLib/Yk/uprepos.rb +94 -0
  121. data/lib/YkLib/Yk/userinfo.rb +91 -0
  122. data/lib/YkLib/Yk/with.rb +109 -0
  123. data/lib/YkLib/version.rb +3 -0
  124. data/lib/YkLib.rb +6 -0
  125. metadata +170 -0
@@ -0,0 +1,1267 @@
1
+
2
+
3
+ require 'Yk/file_aux'
4
+ require 'Yk/__hook__'
5
+
6
+ def __process_ary (*args)
7
+ ret = []
8
+ args.each do |e|
9
+ if e.is_a? Array
10
+ tmpArr = []
11
+ e.each do |f|
12
+ tmpArr.push yield(f)
13
+ end
14
+ ret.push tmpArr
15
+ else
16
+ ret.push yield(e)
17
+ end
18
+ end
19
+ if ret.size == 1
20
+ return ret[0]
21
+ elsif ret.size == 0
22
+ return nil
23
+ else
24
+ return ret
25
+ end
26
+ end
27
+
28
+
29
+ class PathReplicator
30
+ attr :root
31
+ FileOrg = File.__hook_group
32
+ FileUtilsOrg = FileUtils.__hook_group
33
+ IOOrg = IO.__hook_group
34
+ DirOrg = Dir.__hook_group
35
+ def rep (*args)
36
+ ret = __process_ary *args do |pth|
37
+ pth = FileOrg.normalize_path(pth)
38
+ if FileOrg.is_in(pth, @root)
39
+ pth
40
+ else
41
+ symlinked = false
42
+ linkReplicate = false
43
+ arr = pth.split /\//
44
+ arr.each_index do |i|
45
+ e = arr[0 .. i].join("/")
46
+ residue = arr[(i + 1) .. -1].join("/")
47
+ if e == ""
48
+ e = "/"
49
+ else
50
+ residue = "/" + residue
51
+ end
52
+ if @debugRootFiles[e] == nil
53
+ stat = FileOrg.lstat(e) rescue nil
54
+ if stat
55
+ @debugRootFiles[e] = 0
56
+ begin
57
+ case stat.ftype
58
+ when "symlink"
59
+ if (tmp = FileOrg.readlink(e)) =~ /^\//
60
+ if FileOrg.symlink?(tmp) || FileOrg.exist?(tmp)
61
+ rep(tmp + residue)
62
+ end
63
+ FileOrg.resymlink(@root + tmp, @root + e)
64
+ else
65
+ tmp = FileOrg.resolv_link(e)
66
+ if FileOrg.symlink?(tmp) || FileOrg.exist?(tmp)
67
+ rep(tmp + residue)
68
+ end
69
+ FileOrg.resymlink(tmp, @root + e)
70
+ end
71
+ FileUtilsOrg.cp_stat(e, @root + e)
72
+ symlinked = true
73
+ when "directory"
74
+ FileUtilsOrg.mkdir_p(@root + e)
75
+ FileUtilsOrg.cp_stat(e, @root + e)
76
+ else
77
+ FileUtilsOrg.copy_entry(e, @root + e)
78
+ end
79
+ rescue => e
80
+ STDERR.write "#{e.class}:#{e}\n"
81
+ end
82
+ else
83
+ @debugRootFiles[e] = -1
84
+ end
85
+ end
86
+ end
87
+ @root + pth
88
+ end
89
+ end
90
+ ret
91
+ end
92
+ def setModified (f)
93
+ if @debugRootFiles[f] != -1 && @debugRootFiles[f] != nil
94
+ @debugRootFiles[f] = 1
95
+ end
96
+ end
97
+ def check
98
+ @debugRootFiles.each_key do |e|
99
+ if !FileOrg.symlink?(@root + e) && !FileOrg.exist?(@root + e)
100
+ @debugRootFiles[e] = -1
101
+ elsif @debugRootFiles[e] == -1
102
+ @debugRootFiles[e] = 1
103
+ end
104
+ end
105
+ recCheck = Proc.new do |pth|
106
+ pth =~ /^#{Regexp.escape @root}(\/|$)/
107
+ r = "/" + $'
108
+ if @debugRootFiles[r] == nil
109
+ @debugRootFiles[r] = 1
110
+ end
111
+ if !FileOrg.symlink?(pth) && FileOrg.directory?(pth)
112
+ DirOrg.foreach pth do |f|
113
+ if f != "." && f != ".."
114
+ recCheck.call pth + "/" + f
115
+ end
116
+ end
117
+ end
118
+ end
119
+ recCheck.call @root
120
+ end
121
+ def conv (*args)
122
+ __process_ary *args do |pth|
123
+ pth = FileOrg.normalize_path(pth)
124
+ if FileOrg.is_in(pth, @root)
125
+ pth
126
+ else
127
+ arr = pth.split /\//
128
+ mustConv = false
129
+ arr.each_index do |i|
130
+ sp = arr[0..i].join("/")
131
+ sp == "" && sp = "/"
132
+ if @debugRootFiles[sp] == -1 || (@debugRootFiles[sp] != nil && i == arr.size - 1 && @debugRootFiles[sp] >= 0)
133
+ mustConv = true
134
+ end
135
+ end
136
+ if !mustConv
137
+ pth
138
+ else
139
+ if pth == "/"
140
+ root
141
+ else
142
+ root + "/" + pth
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ def rev (*args)
149
+ __process_ary *args do |pth|
150
+ if pth == @root
151
+ "/"
152
+ else
153
+ if pth !~ /^#{Regexp.escape(@root)}(\/|$)/
154
+ pth
155
+ else
156
+ "/" + $'
157
+ end
158
+ end
159
+ end
160
+ end
161
+ def deleted? (pth)
162
+ pth = FileOrg.normalize_path(pth)
163
+ @debugRootFiles[pth] == -1
164
+ end
165
+ def altered? (pth)
166
+ pth = FileOrg.normalize_path(pth)
167
+ @debugRootFiles[pth] == 1
168
+ end
169
+ def initialize (r)
170
+ @root = r
171
+ @debugRootFiles = Hash.new
172
+ if FileOrg.normalize_path(r) == "/"
173
+ raise ArgumentError.new("cannot replicate to '/'")
174
+ end
175
+ end
176
+ def setDefault (obj)
177
+ @@default = obj
178
+ end
179
+ def normalizeReplicated
180
+ normList = Hash.new
181
+ @debugRootFiles.each do |k, v|
182
+ if v == 1
183
+ arr = k.split(/\//)
184
+ arr.each_index do |i|
185
+ tmp = arr[0..i].join("/")
186
+ if tmp == ""
187
+ tmp = "/"
188
+ end
189
+ normList[tmp] = true
190
+ end
191
+ end
192
+ end
193
+ @debugRootFiles.each_key do |k|
194
+ if !normList[k]
195
+ FileUtilsOrg.rm_f @root + k
196
+ elsif FileOrg.symlink? @root + k
197
+ lnk = FileOrg.readlink @root + k
198
+ if lnk =~ /^#{Regexp.escape @root}(\/|$)/
199
+ lnk = "/" + $'
200
+ FileUtilsOrg.ln_sf @root + k, lnk
201
+ end
202
+ end
203
+ end
204
+ end
205
+ def PathReplicator.default
206
+ @@default
207
+ end
208
+ @@default = nil
209
+ def PathReplicator.[] (*args)
210
+ if @@default
211
+ @@default.conv(*args)
212
+ else
213
+ if args.size <= 1
214
+ args[0]
215
+ else
216
+ args
217
+ end
218
+ end
219
+ end
220
+ def PathReplicator.conv (*args)
221
+ if @@default
222
+ @@default.conv(*args)
223
+ else
224
+ if args.size <= 1
225
+ args[0]
226
+ else
227
+ args
228
+ end
229
+ end
230
+ end
231
+ def PathReplicator.rep (*args)
232
+ if @@default
233
+ begin
234
+ ret = cv = @@default.rep(args)
235
+ if ret.size <= 1
236
+ ret = ret[0]
237
+ end
238
+ if block_given?
239
+ ret = yield *cv
240
+ end
241
+ ensure
242
+ @@default.check
243
+ end
244
+ ret
245
+ else
246
+ if args.size <= 1
247
+ ret = args[0]
248
+ else
249
+ ret = args
250
+ end
251
+ if block_given?
252
+ ret = yield *args
253
+ end
254
+ ret
255
+ end
256
+ end
257
+ def PathReplicator.rev (*args)
258
+ if @@default
259
+ @@default.rev(*args)
260
+ else
261
+ if args.size <= 1
262
+ args[0]
263
+ else
264
+ args
265
+ end
266
+ end
267
+ end
268
+ def PathReplicator.deleted? (arg)
269
+ if @@default
270
+ @@default.deleted? arg
271
+ else
272
+ false
273
+ end
274
+ end
275
+ def PathReplicator.root
276
+ if @@default
277
+ @@default.root
278
+ else
279
+ nil
280
+ end
281
+ end
282
+ def PathReplicator.setRoot (r)
283
+ r = File.resolv_link(r)
284
+ @@default = PathReplicator.new(r)
285
+ @@default.check
286
+ end
287
+ def PathReplicator.setModified (f)
288
+ if @@default
289
+ if f.is_a? Array
290
+ f.each do |e|
291
+ @@default.setModified(e)
292
+ end
293
+ else
294
+ @@default.setModified(f)
295
+ end
296
+ end
297
+ end
298
+ def PathReplicator.normalizeReplicated
299
+ if @@default
300
+ @@default.normalizeReplicated
301
+ end
302
+ end
303
+ def PathReplicator.check
304
+ if @@default
305
+ @@default.check
306
+ end
307
+ end
308
+ def PathReplicator.set?
309
+ @@default != nil
310
+ end
311
+ end
312
+
313
+
314
+ if ENV['DEBUG'] || defined? DEBUG
315
+ if !defined? DEBUG_ROOT
316
+ DEBUG_ROOT = "/var/tmp/debug_rep/#{File.dirname($0)}/#{$$}/root"
317
+ FileUtils.mkdir_p DEBUG_ROOT
318
+ end
319
+ PathReplicator.setRoute(DEBUG_ROOT)
320
+ end
321
+
322
+
323
+ class << File
324
+ org = PathReplicator::FileOrg
325
+
326
+ __hook__ :lstat do |closure|
327
+ org.lstat PathReplicator[closure.args[0]]
328
+ end
329
+
330
+ __hook__ :stat do |closure|
331
+ org.stat PathReplicator[closure.args[0]]
332
+ end
333
+
334
+ __hook__ :readlink do |closure|
335
+ tmp = org.readlink PathReplicator[closure.args[0]]
336
+ if tmp !~ /^\//
337
+ tmp
338
+ else
339
+ PathReplicator.rev(closure.arg[0])
340
+ end
341
+ end
342
+
343
+ __hook__ :symlink do |closure|
344
+ begin
345
+ if args[0] !~ /^\//
346
+ d = File.dirname(closure.args[1])
347
+ if d[-1] == ?/
348
+ f = d + args[0]
349
+ else
350
+ f = d + "/" + closure.args[0]
351
+ end
352
+ PathReplicator.rep(f)
353
+ else
354
+ f = closure.args[0]
355
+ closure.args[0] = PathReplicator.rep(f)
356
+ end
357
+ closure.args[1] = PathReplicator.rep(closure.args[1])
358
+ org.symlink *closure.args
359
+ ensure
360
+ PathReplicator.check
361
+ PathReplicator.setModified(closure.args[1])
362
+ end
363
+ end
364
+
365
+ __hook__ :exist? do |closure|
366
+ c = PathReplicator.conv(closure.args[0])
367
+ org.exist? c
368
+ end
369
+
370
+ __hook__ :symlink? do |closure|
371
+ org.symlink? PathReplicator.conv(closure.args[0])
372
+ end
373
+
374
+ __hook__ :chmod do |closure|
375
+ files = closure.args[1..-1]
376
+ mode = closure.args[0]
377
+ PathReplicator.rep(files) do |fls|
378
+ org.chmod mode, *fls
379
+ end
380
+ PathReplicator.setModified(files)
381
+ end
382
+
383
+ __hook__ :lchmod do |closure|
384
+ files = closure.args[1..-1]
385
+ mode = closure.args[0]
386
+ PathReplicator.rep(files) do |fls|
387
+ org.lchmod mode, *fls
388
+ end
389
+ PathReplicator.setModified(files)
390
+ end
391
+
392
+ __hook__ :chown do |closure|
393
+ o = closure.args[0]
394
+ g = closure.args[1]
395
+ files = closure.args[2..-1]
396
+ PathReplicator.rep(files) do |fls|
397
+ org.chown o, g, *fls
398
+ end
399
+ PathReplicator.setModified(files)
400
+ end
401
+
402
+ __hook__ :lchown do |closure|
403
+ o = closure.args[0]
404
+ g = closure.args[1]
405
+ files = closure.args[2..-1]
406
+ PathReplicator.rep(files) do |fls|
407
+ org.lchown o, g, *fls
408
+ end
409
+ PathReplicator.setModified(files)
410
+ end
411
+
412
+ __hook__ :delete do |closure|
413
+ files = closure.args
414
+ PathReplicator.rep(files) do |fls|
415
+ org.delete *fls
416
+ end
417
+ end
418
+
419
+ __hook__ :unlink do |closure|
420
+ files = closure.args
421
+ PathReplicator.rep(files) do |fls|
422
+ org.unlink *fls
423
+ end
424
+ end
425
+
426
+ __hook__ :new do |closure|
427
+ path = closure.args[0]
428
+ args = closure.args[1..-1]
429
+ bl = closure.block
430
+ org.open(path, *args, &bl)
431
+ end
432
+
433
+ __hook__ :open do |closure|
434
+ path = closure.args[0]
435
+ args = closure.args[1..-1]
436
+ bl = closure.block
437
+ if path[0] != ?|
438
+ if args.size == 0 || args[0] !~ /[w\+]/ #read
439
+ org.open PathReplicator[args[0]], *args, &bl
440
+ else #write
441
+ PathReplicator.rep path do |a|
442
+ org.open a, *args, &bl
443
+ end
444
+ PathReplicator.setModified(path)
445
+ end
446
+ else
447
+ org.open path, *args, &bl
448
+ end
449
+ end
450
+
451
+ __hook__ :rename do |closure|
452
+ PathReplicator.rep closure.args do |fls|
453
+ org.rename *fls
454
+ end
455
+ PathReplicator.setModified(closure.args[1])
456
+ end
457
+
458
+ __hook__ :truncate do |closure|
459
+ file, len = closure.args
460
+ PathReplicator.rep file do |f|
461
+ org.truncate f, len
462
+ end
463
+ PathReplicator.setModified(file)
464
+ end
465
+
466
+ __hook__ :utime do |closure|
467
+ atime, mtime, *files = closure.args
468
+ PathReplicator.rep files do |fls|
469
+ org.utime atime, mtime, *fls
470
+ end
471
+ PathReplicator.setModified(files)
472
+ end
473
+
474
+ __hook__ :atime do |closure|
475
+ filename = closure.args[0]
476
+ org.atime PathReplicator[filename]
477
+ end
478
+
479
+ __hook__ :ctime do |closure|
480
+ filename = closure.args[0]
481
+ org.ctime PathReplicator[filename]
482
+ end
483
+
484
+ __hook__ :mtime do |closure|
485
+ filename = closure.args[0]
486
+ org.mtime PathReplicator[filename]
487
+ end
488
+
489
+ __hook__ :expand_path do |closure|
490
+ args = closure.args
491
+ path, defalutDir = args[0], args[1]
492
+ defaultDir = Dir.pwd
493
+ org.expand_path path, defaultDir
494
+ end
495
+
496
+ __hook__ :ftype do |closure|
497
+ filename = closure.args[0]
498
+ org.ftype PathReplicator[filename]
499
+ end
500
+
501
+ __hook__ :blockdev? do |closure|
502
+ path = closure.args[0]
503
+ org.blockdev? PathReplicator[path]
504
+ end
505
+
506
+ __hook__ :chardev? do |closure|
507
+ path = closure.args[0]
508
+ org.chardev? PathReplicator[path]
509
+ end
510
+
511
+ __hook__ :directory? do |closure|
512
+ path = closure.args[0]
513
+ org.directory? PathReplicator[path]
514
+ end
515
+
516
+ __hook__ :executable? do |closure|
517
+ path = closure.args[0]
518
+ org.executable? PathReplicator[path]
519
+ end
520
+
521
+ __hook__ :executable_real? do |closure|
522
+ path = closure.args[0]
523
+ org.executable_real? PathReplicator[path]
524
+ end
525
+
526
+ __hook__ :exist? do |closure|
527
+ path = closure.args[0]
528
+ org.exist? PathReplicator[path]
529
+ end
530
+
531
+ __hook__ :file? do |closure|
532
+ path = closure.args[0]
533
+ org.file? PathReplicator[path]
534
+ end
535
+
536
+ __hook__ :grpowned? do |closure|
537
+ path = closure.args[0]
538
+ org.grpowned? PathReplicator[path]
539
+ end
540
+
541
+ __hook__ :owned? do |closure|
542
+ path = closure.args[0]
543
+ org.owned? PathReplicator[path]
544
+ end
545
+
546
+ __hook__ :identical? do |closure|
547
+ path1 = closure.args[0]
548
+ path2 = closure.args[1]
549
+ org.identical? PathReplicator[path]
550
+ end
551
+
552
+ __hook__ :pipe? do |closure|
553
+ path = closure.args[0]
554
+ org.pipe? PathReplicator[path]
555
+ end
556
+
557
+ __hook__ :readable? do |closure|
558
+ path = closure.args[0]
559
+ org.readable? PathReplicator[path]
560
+ end
561
+
562
+ __hook__ :readable_real? do |closure|
563
+ path = closure.args[0]
564
+ org.readable_real? PathReplicator[path]
565
+ end
566
+
567
+ __hook__ :setgid? do |closure|
568
+ path = closure.args[0]
569
+ org.setgid? PathReplicator[path]
570
+ end
571
+
572
+ __hook__ :setuid? do |closure|
573
+ path = closure.args[0]
574
+ org.setuid? PathReplicator[path]
575
+ end
576
+
577
+ __hook__ :size do |closure|
578
+ path = closure.args[0]
579
+ org.size PathReplicator[path]
580
+ end
581
+
582
+ __hook__ :size? do |closure|
583
+ path = closure.args[0]
584
+ org.size? PathReplicator[path]
585
+ end
586
+
587
+ __hook__ :socket? do |closure|
588
+ path = closure.args[0]
589
+ org.socket? PathReplicator[path]
590
+ end
591
+
592
+ __hook__ :sticky? do |closure|
593
+ path = closure.args[0]
594
+ org.sticky? PathReplicator[path]
595
+ end
596
+
597
+ __hook__ :writable? do |closure|
598
+ path = closure.args[0]
599
+ org.writable? PathReplicator[path]
600
+ end
601
+
602
+ __hook__ :writable_real? do |closure|
603
+ path = closure.args[0]
604
+ org.writable_real? PathReplicator[path]
605
+ end
606
+
607
+ __hook__ :zero? do |closure|
608
+ path = closure.args[0]
609
+ org.zero? PathReplicator[path]
610
+ end
611
+
612
+ end
613
+
614
+
615
+ Kernel.__hook__ :open do |closure|
616
+ File.open(*closure.args, &closure.block)
617
+ end
618
+
619
+
620
+ class << IO
621
+ org = PathReplicator::IOOrg
622
+
623
+ __hook__ :sysopen do |closure|
624
+ path, *args = closure.args
625
+ bl = closure.block
626
+ if args.size == 0 || args[0] !~ /[wx\+]/ #read
627
+ org.sysopen PathReplicator[args[0]], *args, &bl
628
+ else #write
629
+ PathReplicator.rep path do |a|
630
+ org.sysopen a, *args, &bl
631
+ end
632
+ PathReplicator.setModified(path)
633
+ end
634
+ end
635
+
636
+ __hook__ :foreach do |closure|
637
+ path, *rs = closure.args
638
+ bl = closure.block
639
+ org.foreach PathReplicator[path], *rs, &bl
640
+ end
641
+
642
+ __hook__ :read do |closure|
643
+ path, *args = closure.args
644
+ org.read PathReplicator[path], *args
645
+ end
646
+
647
+ __hook__ :readlines do |closure|
648
+ path, *args = closure.args
649
+ ret = PathReplicator[path]
650
+ org.readlines ret, *args
651
+ end
652
+
653
+ end
654
+
655
+
656
+ class << FileUtils
657
+ org = PathReplicator::FileUtilsOrg
658
+
659
+ __hook__ :ln_s do |closure|
660
+ args = closure.args
661
+ begin
662
+ if args[0] =~ /^\//
663
+ args[0] = PathReplicator.rep(args[0])
664
+ else
665
+ PathReplicator.rep(args[0])
666
+ end
667
+ args[1] = PathReplicator.rep(args[1])
668
+ org.ln_s *args
669
+ ensure
670
+ PathReplicator.check
671
+ PathReplicator.setModified(args[1])
672
+ end
673
+ end
674
+
675
+ __hook__ :ln_sf do |closure|
676
+ args = closure.args
677
+ begin
678
+ if args[0] =~ /^\//
679
+ args[0] = PathReplicator.rep(args[0])
680
+ else
681
+ PathReplicator.rep(args[0])
682
+ end
683
+ args[1] = PathReplicator.rep(args[1])
684
+ org.ln_sf *args
685
+ ensure
686
+ PathReplicator.check
687
+ PathReplicator.setModified(args[1])
688
+ end
689
+ end
690
+
691
+ __hook__ :symlink do |closure|
692
+ args = closure.args
693
+ begin
694
+ if args[0] =~ /^\//
695
+ args[0] = PathReplicator.rep(args[0])
696
+ else
697
+ PathReplicator.rep(args[0])
698
+ end
699
+ args[1] = PathReplicator.rep(args[1])
700
+ org.symlink *args
701
+ ensure
702
+ PathReplicator.check
703
+ PathReplicator.setModified(args[1])
704
+ end
705
+ end
706
+
707
+ __hook__ :copy_entry do |closure|
708
+ args = closure.args
709
+ PathReplicator.rep args[1] do |dest|
710
+ org.copy_entry PathReplicator.conv(args[0]), dest, *args[2..-1]
711
+ end
712
+ PathReplicator.setModified(args[0])
713
+ end
714
+
715
+
716
+ __hook__ :cp_stat do |closure|
717
+ args = closure.args
718
+ PathReplicator.rep args[1] do |dest|
719
+ org.cp_stat PathReplicator.conv(args[0]), dest, *args[2..-1]
720
+ end
721
+ PathReplicator.setModified(args[0])
722
+ end
723
+
724
+
725
+ __hook__ :chmod do |closure|
726
+ mode, list, options = closure.args
727
+ options = {} if closure.args.size <= 2
728
+ PathReplicator.rep list do |lst|
729
+ org.chmod mode, lst, options
730
+ end
731
+ PathReplicator.setModified(list)
732
+ end
733
+
734
+ __hook__ :chmod_R do |closure|
735
+ mode, list, options = closure.args
736
+ options = {} if closure.args.size <= 2
737
+ PathReplicator.rep list do |lst|
738
+ org.chmod_R mode, lst, options
739
+ end
740
+ PathReplicator.setModified(list)
741
+ end
742
+
743
+ __hook__ :chown do |closure|
744
+ user, group, list, options = closure.args
745
+ options = {} if closure.args.size <= 3
746
+ PathReplicator.rep list do |lst|
747
+ org.chown user, group, lst, options
748
+ end
749
+ PathReplicator.setModified(list)
750
+ end
751
+
752
+ __hook__ :chown_R do |closure|
753
+ user, group, list, options = closure.args
754
+ options = {} if closure.args.size <= 3
755
+ PathReplicator.rep list do |lst|
756
+ org.chown_R user, group, lst, options
757
+ end
758
+ PathReplicator.setModified(list)
759
+ end
760
+
761
+ __hook__ :copy_file do |closure|
762
+ args = closure.args
763
+ PathReplicator.rep args[1] do |dest|
764
+ org.copy_file PathReplicator.conv(args[0]), dest, *args[2..-1]
765
+ end
766
+ PathReplicator.setModified(args[1])
767
+ end
768
+
769
+ __hook__ :cp do |closure|
770
+ args = closure.args
771
+ PathReplicator.rep args[1] do |dest|
772
+ org.cp PathReplicator.conv(args[0]), dest, *args[2..-1]
773
+ end
774
+ PathReplicator.setModified(args[1])
775
+ end
776
+
777
+ __hook__ :copy do |closure|
778
+ args = closure.args
779
+ PathReplicator.rep args[1] do |dest|
780
+ org.copy PathReplicator.conv(args[0]), dest, *args[2..-1]
781
+ end
782
+ PathReplicator.setModified(args[1])
783
+ end
784
+
785
+ __hook__ :cp_r do |closure|
786
+ args = closure.args
787
+ PathReplicator.rep args[1] do |dest|
788
+ org.cp_r PathReplicator.conv(args[0]), dest, *args[2..-1]
789
+ end
790
+ PathReplicator.setModified(args[1])
791
+ end
792
+
793
+ __hook__ :install do |closure|
794
+ args = closure.args
795
+ PathReplicator.rep args[1] do |dest|
796
+ org.install PathReplicator.conv(args[0]), dest, *args[2..-1]
797
+ end
798
+ PathReplicator.setModified(args[1])
799
+ end
800
+
801
+ __hook__ :ln do |closure|
802
+ args = closure.args
803
+ PathReplicator.rep args[0..1] do |ags|
804
+ org.ln ags[0], ags[1], *args[2..-1]
805
+ end
806
+ PathReplicator.setModified(args[1])
807
+ end
808
+
809
+ __hook__ :link do |closure|
810
+ args = closure.args
811
+ PathReplicator.rep args[0..1] do |ags|
812
+ org.link ags[0], ags[1], *args[2..-1]
813
+ end
814
+ PathReplicator.setModified(args[1])
815
+ end
816
+
817
+ __hook__ :mkdir do |closure|
818
+ dir, options = closure.args
819
+ options = {} if closure.args.size <= 1
820
+ PathReplicator.rep dir do |d|
821
+ org.mkdir d, options
822
+ end
823
+ PathReplicator.setModified(dir)
824
+ end
825
+
826
+ __hook__ :mkdir_p do |closure|
827
+ dir, options = closure.args
828
+ options = {} if closure.args.size <= 1
829
+ PathReplicator.rep dir do |d|
830
+ org.mkdir_p d, options
831
+ end
832
+ PathReplicator.setModified(dir)
833
+ end
834
+
835
+ __hook__ :mkpath do |closure|
836
+ dir, options = closure.args
837
+ options = {} if closure.args.size <= 1
838
+ PathReplicator.rep dir do |d|
839
+ org.mkpath d, options
840
+ end
841
+ PathReplicator.setModified(dir)
842
+ end
843
+
844
+ __hook__ :makedirs do |closure|
845
+ dir, options = closure.args
846
+ options = {} if closure.args.size <= 1
847
+ PathReplicator.rep dir do |d|
848
+ org.makedirs d, options
849
+ end
850
+ PathReplicator.setModified(dir)
851
+ end
852
+
853
+ __hook__ :mv do |closure|
854
+ a, b, options = closure.args
855
+ options = {} if closure.args.size <= 2
856
+ PathReplicator.rep a, b do |_a, _b|
857
+ org.mv _a, _b, options
858
+ end
859
+ PathReplicator.setModified(b)
860
+ end
861
+
862
+ __hook__ :move do |closure|
863
+ a, b, options = closure.args
864
+ options = {} if closure.args.size <= 2
865
+ PathReplicator.rep a, b do |_a, _b|
866
+ org.move _a, _b, options
867
+ end
868
+ PathReplicator.setModified(b)
869
+ end
870
+
871
+ __hook__ :rm do |closure|
872
+ a, options = closure.args
873
+ options = {} if closure.args.size <= 1
874
+ PathReplicator.rep a do |_a|
875
+ org.rm _a, options
876
+ end
877
+ end
878
+
879
+ __hook__ :remove do |closure|
880
+ a, options = closure.args
881
+ options = {} if closure.args.size <= 1
882
+ PathReplicator.rep a do |_a|
883
+ org.remove _a, options
884
+ end
885
+ end
886
+
887
+ __hook__ :rm_f do |closure|
888
+ args = closure.args
889
+ a = args[0]
890
+ if args.size >= 2
891
+ options = args[1]
892
+ else
893
+ options = {}
894
+ end
895
+ PathReplicator.rep a do |_a|
896
+ org.rm_f _a, options
897
+ end
898
+ end
899
+
900
+ __hook__ :safe_unlink do |closure|
901
+ a, options = closure.args
902
+ options = {} if closure.args.size <= 1
903
+ PathReplicator.rep a do |_a|
904
+ org.safe_unlink _a, options
905
+ end
906
+ end
907
+
908
+ __hook__ :rm_r do |closure|
909
+ a, options = closure.args
910
+ options = {} if closure.args.size <= 1
911
+ PathReplicator.rep a do |_a|
912
+ org.rm_r _a, options
913
+ end
914
+ end
915
+
916
+ __hook__ :rm_rf do |closure|
917
+ a, options = closure.args
918
+ options = {} if closure.args.size <= 1
919
+ PathReplicator.rep a do |_a|
920
+ org.rm_rf _a, options
921
+ end
922
+ end
923
+
924
+ __hook__ :rmtree do |closure|
925
+ a, options = closure.args
926
+ options = {} if closure.args.size <= 1
927
+ PathReplicator.rep a do |_a|
928
+ org.rmtree _a, options
929
+ end
930
+ end
931
+
932
+ __hook__ :rmdir do |closure|
933
+ a, options = closure.args
934
+ options = {} if closure.args.size <= 1
935
+ PathReplicator.rep a do |_a|
936
+ org.rmdir _a, options
937
+ end
938
+ end
939
+
940
+ __hook__ :remove_entry do |closure|
941
+ a, force = closure.args
942
+ force = false if closure.args.size <= 1
943
+ PathReplicator.rep a do |_a|
944
+ org.remove_entry _a, force
945
+ end
946
+ end
947
+
948
+ __hook__ :remove_entry_secure do |closure|
949
+ a, force = closure.args
950
+ force = false if closure.args.size <= 1
951
+ PathReplicator.rep a do |_a|
952
+ org.remove_entry_secure _a, force
953
+ end
954
+ end
955
+
956
+ __hook__ :remove_file do |closure|
957
+ a, force = closure.args
958
+ force = false if closure.args.size <= 1
959
+ PathReplicator.rep a do |_a|
960
+ org.remove_file _a, force
961
+ end
962
+ end
963
+
964
+ __hook__ :touch do |closure|
965
+ a, options = closure.args
966
+ options = {} if closure.args.size <= 1
967
+ PathReplicator.rep a do |_a|
968
+ org.touch _a, options
969
+ end
970
+ PathReplicator.setModified(a)
971
+ end
972
+
973
+ end
974
+
975
+
976
+ class << Dir
977
+ org = PathReplicator::DirOrg
978
+
979
+ __hook__ :delete do |closure|
980
+ a = closure.args[0]
981
+ PathReplicator.rep a do |_a|
982
+ org.delete _a
983
+ end
984
+ end
985
+
986
+ __hook__ :rmdir do |closure|
987
+ a = closure.args[0]
988
+ PathReplicator.rep a do |_a|
989
+ org.rmdir _a
990
+ end
991
+ end
992
+
993
+ __hook__ :unlink do |closure|
994
+ a = closure.args[0]
995
+ PathReplicator.rep a do |_a|
996
+ org.unlink _a
997
+ end
998
+ end
999
+
1000
+ __hook__ :mkdir do |closure|
1001
+ a = closure.args
1002
+ PathReplicator.rep a[0] do |_a|
1003
+ org.mkdir _a, *a[1..-1]
1004
+ end
1005
+ PathReplicator.setModified(a[0])
1006
+ end
1007
+
1008
+ __hook__ :[] do |closure|
1009
+ args = closure.args
1010
+ glob(args)
1011
+ end
1012
+
1013
+ __hook__ :glob do |closure|
1014
+ args, *flgs = closure.args
1015
+ bl = closure.block
1016
+ if PathReplicator.set?
1017
+ if !args.is_a? Arrary
1018
+ args = [args]
1019
+ end
1020
+ args_rep = []
1021
+ args.each_index do |i|
1022
+ e = args[i]
1023
+ if e =~ /^\//
1024
+ if tmp = PathReplicator::FileOrg.is_in(e, PathReplicator.root)
1025
+ args[i] = "/" + tmp
1026
+ else
1027
+ e = PathReplicator.root + e
1028
+ end
1029
+ else
1030
+ pwd = org.pwd
1031
+ if pwd == "/"
1032
+ e = "/" + e
1033
+ else
1034
+ e = pwd + "/" + e
1035
+ end
1036
+ if tmp = PathReplicator::FileOrg.is_in(e, PathReplicator.root)
1037
+ args[i] = "/" + tmp
1038
+ else
1039
+ e = PathReplicator.root + e
1040
+ end
1041
+ end
1042
+ args_rep.push e
1043
+ end
1044
+ ret = []
1045
+ args.each do |e|
1046
+ ret += org.glob e, *flgs
1047
+ end
1048
+ args_rep.each do |e|
1049
+ ret += PathReplicator.rev org.glob(e, *flgs)
1050
+ end
1051
+ h = Hash.new
1052
+ ret.each do |e|
1053
+ if !PathReplicator.deleted?(e)
1054
+ h[e] = true
1055
+ end
1056
+ end
1057
+ ret = h.keys
1058
+ if block_given?
1059
+ ret.each do |e|
1060
+ bl.call e
1061
+ end
1062
+ ret
1063
+ else
1064
+ ret
1065
+ end
1066
+ else
1067
+ org.glob args, *flgs, &bl
1068
+ end
1069
+ end
1070
+
1071
+ __hook__ :foreach do |closure|
1072
+ path = closure.args[0]
1073
+ if PathReplicator.set?
1074
+ hash = Hash.new
1075
+ if tmp = File.is_in(path, PathReplicator.root)
1076
+ path = "/" + tmp
1077
+ end
1078
+ if PathReplicator::FileOrg.directory? path
1079
+ org.foreach path do |f|
1080
+ if f != ".." && f != "."
1081
+ hash[f] = true
1082
+ end
1083
+ end
1084
+ end
1085
+ if PathReplicator::FileOrg.directory?(tmp = PathReplicator.root + PathReplicator::FileOrg.expand_path(path))
1086
+ org.foreach tmp do |f|
1087
+ if f != ".." && f != "."
1088
+ hash[f] = true
1089
+ end
1090
+ end
1091
+ end
1092
+ if path == "/"
1093
+ path = ""
1094
+ yield ".."
1095
+ end
1096
+ yield "."
1097
+ hash.keys.each do |e|
1098
+ if !PathReplicator.deleted?(path + "/" + e)
1099
+ yield e
1100
+ end
1101
+ end
1102
+ else
1103
+ org.foreach path do |e|
1104
+ yield e
1105
+ end
1106
+ end
1107
+ end
1108
+
1109
+ __hook__ :chdir do |closure|
1110
+ path = closure.args[0]
1111
+ org.chdir PathReplicator[path]
1112
+ end
1113
+
1114
+ __hook__ :chroot do |closure|
1115
+ path = closure.args[0]
1116
+ org.chroot PathReplicator[path]
1117
+ end
1118
+
1119
+ __hook__ :entries do |closure|
1120
+ path = closure.args[0]
1121
+ ret = []
1122
+ foreach path do |e|
1123
+ ret.push e
1124
+ end
1125
+ ret
1126
+ end
1127
+
1128
+ __hook__ :getwd do |closure|
1129
+ arg = closure.args
1130
+ ret = PathReplicator.rev(org.getwd)
1131
+ ret
1132
+ end
1133
+
1134
+ __hook__ :getwd do |closure|
1135
+ arg = closure.args
1136
+ org.getwd(*arg)
1137
+ end
1138
+
1139
+ end
1140
+
1141
+
1142
+ class << FileTest
1143
+ org = FileTest.__hook_group
1144
+
1145
+ __hook__ :blockdev? do |closure|
1146
+ path = closrue.args[0]
1147
+ org.blockdev? PathReplicator[path]
1148
+ end
1149
+
1150
+ __hook__ :chardev? do |closure|
1151
+ path = closrue.args[0]
1152
+ org.chardev? PathReplicator[path]
1153
+ end
1154
+
1155
+ __hook__ :directory? do |closure|
1156
+ path = closrue.args[0]
1157
+ org.directory? PathReplicator[path]
1158
+ end
1159
+
1160
+ __hook__ :executable? do |closure|
1161
+ path = closrue.args[0]
1162
+ org.executable? PathReplicator[path]
1163
+ end
1164
+
1165
+ __hook__ :executable_real? do |closure|
1166
+ path = closrue.args[0]
1167
+ org.executable_real? PathReplicator[path]
1168
+ end
1169
+
1170
+ __hook__ :exist? do |closure|
1171
+ path = closrue.args[0]
1172
+ org.exist? PathReplicator[path]
1173
+ end
1174
+
1175
+ __hook__ :exist? do |closure|
1176
+ path = closrue.args[0]
1177
+ org.exist? PathReplicator[path]
1178
+ end
1179
+
1180
+ __hook__ :file? do |closure|
1181
+ path = closrue.args[0]
1182
+ org.file? PathReplicator[path]
1183
+ end
1184
+
1185
+ __hook__ :grpowned? do |closure|
1186
+ path = closrue.args[0]
1187
+ org.grpowned? PathReplicator[path]
1188
+ end
1189
+
1190
+ __hook__ :owned? do |closure|
1191
+ path = closrue.args[0]
1192
+ org.owned? PathReplicator[path]
1193
+ end
1194
+
1195
+ __hook__ :identical? do |closure|
1196
+ path1, path2 = closure.args
1197
+ org.identical? PathReplicator[path1], PathReplicator[path2]
1198
+ end
1199
+
1200
+ __hook__ :pipe? do |closure|
1201
+ path = closrue.args[0]
1202
+ org.pipe? PathReplicator[path]
1203
+ end
1204
+
1205
+ __hook__ :readable? do |closure|
1206
+ path = closrue.args[0]
1207
+ org.readable? PathReplicator[path]
1208
+ end
1209
+
1210
+ __hook__ :readable_real? do |closure|
1211
+ path = closrue.args[0]
1212
+ org.readable_real? PathReplicator[path]
1213
+ end
1214
+
1215
+ __hook__ :setgid? do |closure|
1216
+ path = closrue.args[0]
1217
+ org.setgid? PathReplicator[path]
1218
+ end
1219
+
1220
+ __hook__ :setuid? do |closure|
1221
+ path = closrue.args[0]
1222
+ org.setuid? PathReplicator[path]
1223
+ end
1224
+
1225
+ __hook__ :size do |closure|
1226
+ path = closrue.args[0]
1227
+ org.size PathReplicator[path]
1228
+ end
1229
+
1230
+ __hook__ :size? do |closure|
1231
+ path = closrue.args[0]
1232
+ org.size? PathReplicator[path]
1233
+ end
1234
+
1235
+ __hook__ :socket? do |closure|
1236
+ path = closrue.args[0]
1237
+ org.socket? PathReplicator[path]
1238
+ end
1239
+
1240
+ __hook__ :sticky? do |closure|
1241
+ path = closrue.args[0]
1242
+ org.sticky? PathReplicator[path]
1243
+ end
1244
+
1245
+ __hook__ :symlink? do |closure|
1246
+ path = closrue.args[0]
1247
+ org.symlink? PathReplicator[path]
1248
+ end
1249
+
1250
+ __hook__ :writable? do |closure|
1251
+ path = closrue.args[0]
1252
+ org.writable? PathReplicator[path]
1253
+ end
1254
+
1255
+ __hook__ :writable_real? do |closure|
1256
+ path = closrue.args[0]
1257
+ org.writable_real? PathReplicator[path]
1258
+ end
1259
+
1260
+ __hook__ :zero? do |closure|
1261
+ path = closrue.args[0]
1262
+ org.zero? PathReplicator[path]
1263
+ end
1264
+
1265
+ end
1266
+
1267
+