YkLib 0.1.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.
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,314 @@
1
+ #
2
+
3
+
4
+ require 'time'
5
+ require 'Yk/misc_tz'
6
+ require 'Yk/path_aux'
7
+ require 'Yk/shellquote'
8
+
9
+
10
+ INTPRLIST = ["/bin/sh", "/bin/ruby", "/bin/bash", "/usr/bin/bash", "/usr/bin/python", "/usr/bin/ruby", "/usr/bin/supervise" ]
11
+
12
+ class ProcInfo
13
+ private
14
+ class HashArr < Hash
15
+ def insert (k, item)
16
+ (self[k] ||= []).push item
17
+ end
18
+ end
19
+ class ProcElem
20
+ attr :pid
21
+ attr :ppid
22
+ attr :prog
23
+ attr :parent, true
24
+ attr :interpreter
25
+ attr :interpreterBase
26
+ attr :startTime
27
+ attr :args
28
+ attr :cmdline
29
+ attr :cwd
30
+ def exe
31
+ @prog
32
+ end
33
+ if CYGWIN
34
+ @@timebase = Time.now.to_f - "/proc/uptime".read.split[0].to_i
35
+ else
36
+ @@timebase = `cat /proc/stat`.each_line{|e| break(e) if e =~ /^btime\s+/ }.split[1].to_i
37
+ end
38
+ if CYGWIN
39
+ JiffiesRatio = 1000.0
40
+ else
41
+ JiffiesRatio = 100.0
42
+ end
43
+ def kill (sig = :TERM)
44
+ Process.kill sig, pid
45
+ end
46
+ def infoDir
47
+ "/proc/#{@pid}"
48
+ end
49
+ @@allList = Hash.new
50
+ def parent
51
+ @parent ||= @ppid != 0 && self.class.new(@ppid)
52
+ end
53
+ def initialize (pid)
54
+ @pid = pid
55
+ @ppid = (statArr = (infoDir / "stat").read.split)[3].to_i
56
+ @args = (carr = (infoDir / "cmdline")._?._rf?.read.split("\0"))[1..-1].__it
57
+ @cmdline = carr.__and?.condSQuote.__it
58
+ if (infoDir / "exe").exist?
59
+ @prog = (infoDir / "exe").readlink.chomp rescue nil
60
+ end
61
+ @cwd = (infoDir / "cwd").readlink.chomp rescue nil
62
+ @_startTime = statArr[21].to_i;
63
+ @startTime = Time.at(@@timebase + (@_startTime / JiffiesRatio))
64
+ if INTPRLIST.include?(@prog)
65
+ @interpreter = @prog
66
+ if tmp = @args.each_index{ |i| @args[i][0] != ?- && (tmp = @args.delete_at(i); break(tmp)) }
67
+ if tmp.is_a?(String)
68
+ if tmp.relative?
69
+ @prog = (@cwd / tmp).normalize_path
70
+ else
71
+ @prog = tmp
72
+ end
73
+ end
74
+ end
75
+ end
76
+ @@allList[pid] = self
77
+ end
78
+ def setProcessStatus ps
79
+ @processStatus = ps
80
+ end
81
+ def exited?
82
+ @processStatus && @processStatus.exited?
83
+ end
84
+ def exitstatus
85
+ @processStatus && @processStatus.exitstatus
86
+ end
87
+ def env
88
+ if !@env
89
+ @env = Hash.new
90
+ arr = (infoDir / "environ").read.split("\0")
91
+ arr.each do |e|
92
+ if e =~ /\=/
93
+ @env[$`] = $'
94
+ end
95
+ end
96
+ @env
97
+ else
98
+ @env
99
+ end
100
+ end
101
+ def children
102
+ if !@children
103
+ @children = []
104
+ "/proc".each_entry do |f|
105
+ if f.basename =~ /^(\d+)$/ && f._d? && (f / "environ")._rf?
106
+ if (f / "stat").read.split[3].to_i == @pid
107
+ @children.push ProcElem.new($1.to_i)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ @children
113
+ end
114
+ def alive?
115
+ infoDir.exist? && ((tmp = (infoDir / "stat").read.split)[21].to_i == @_startTime) && tmp[2] != "Z"
116
+ end
117
+ def zombie?
118
+ infoDir.exist? && ((tmp = (infoDir / "stat").read.split)[21].to_i == @_startTime) && tmp[2] == "Z"
119
+ end
120
+ def isProg? expr, match
121
+ begin
122
+ res = false
123
+ if @prog == expr
124
+ res = begin
125
+ case match
126
+ when nil
127
+ true
128
+ when Regexp
129
+ args.find{ |e| e =~ match }
130
+ else
131
+ args.find{ |e| e.include?(match.to_s) }
132
+ end
133
+ end
134
+ end
135
+ res
136
+ rescue
137
+ false
138
+ end
139
+ end
140
+ def file? (f)
141
+ each_file do |g|
142
+ if g == f
143
+ return true
144
+ end
145
+ end
146
+ return false
147
+ end
148
+ def each_file
149
+ begin
150
+ (infoDir / "fd").each_entry do |e|
151
+ begin
152
+ if e.basename =~ /^\d+$/ && e.symlink?
153
+ yield e.readlink
154
+ end
155
+ rescue Errno::ENOENT
156
+ rescue Errno::EACCES
157
+ end
158
+ end
159
+ rescue Errno::ENOENT
160
+ rescue Errno::EACCES
161
+ end
162
+ return false
163
+ end
164
+ def close_files (*args)
165
+ if args.size == 0
166
+ (infoDir / "fd").each_entry do |e|
167
+ if e.basename =~ /^\d+$/ && e.symlink?
168
+ if (fd = $&.to_i) != 0 && fd != 1 && fd != 2
169
+ begin
170
+ IO.for_fd(fd).close
171
+ rescue Errno::EBADF
172
+ STDERR.write "cannot close #{e.readlink}(#{fd})\n"
173
+ end
174
+ end
175
+ end
176
+ end
177
+ else
178
+ (infoDir / "fd").each_entry do |e|
179
+ if e.basename =~ /^\d+$/ && e.symlink? && args.include?(e)
180
+ IO.for_fd($&.to_i).close
181
+ else
182
+ STDERR.write "#{__FILE__}:#{__LINE__}: cannot close #{e}\n"
183
+ end
184
+ end
185
+ end
186
+ end
187
+ def kill (sig)
188
+ Process.kill sig, pid
189
+ end
190
+ def term_or_kill tmout = 2
191
+ Process.kill(:TERM, pid) rescue return(false)
192
+ cnt = 0
193
+ while true
194
+ sleep 0.1
195
+ if !alive?
196
+ return true
197
+ else
198
+ cnt += 1
199
+ if cnt > tmout * 10
200
+ Process.kill(:KILL, pid) rescue return(false)
201
+ return true
202
+ end
203
+ end
204
+ end
205
+ end
206
+ def self.allList
207
+ @@allList
208
+ end
209
+ def waitTerm cnt, step = 1
210
+ waitUntil(cnt, step){!alive?}
211
+ end
212
+ end
213
+ public
214
+ def self.parent
215
+ self.current.parent
216
+ end
217
+ def self.prog (expr, match = nil)
218
+ procList = []
219
+ "/proc".each_entry do |f|
220
+ if f.directory? && f.basename =~ /^\d+$/ && (f / "environ")._rf?
221
+ begin
222
+ pElem = ProcElem.new $&.to_i
223
+ if pElem.isProg? expr, match
224
+ procList.push pElem
225
+ end
226
+ rescue Exception => e
227
+ end
228
+ end
229
+ end
230
+ procList
231
+ end
232
+ def self.waitProg (*args)
233
+ nargs = []
234
+ pargs = []
235
+ args.each do |e|
236
+ if e.is_a? Numeric
237
+ nargs.push e
238
+ else
239
+ pargs.push e
240
+ end
241
+ end
242
+ pres = nil
243
+ res = waitUntil *nargs do
244
+ pres = prog *pargs
245
+ pres.size > 0
246
+ end
247
+ if res
248
+ pres[0]
249
+ else
250
+ res
251
+ end
252
+ end
253
+ def self.pid (id)
254
+ begin
255
+ ret = ProcElem.new(id.to_i)
256
+ rescue
257
+ ret = nil
258
+ end
259
+ ret
260
+ end
261
+ def self.current
262
+ pid($$.to_i)
263
+ end
264
+ def self.findParent (a, m = nil)
265
+ pe = ProcElem.new($$.to_i)
266
+ while true
267
+ if pe.isProg?(a, m)
268
+ return pe
269
+ elsif pe.pid == 1
270
+ return nil
271
+ else
272
+ begin
273
+ pe = ProcElem.new(pe.ppid)
274
+ rescue
275
+ return nil
276
+ end
277
+ end
278
+ end
279
+ end
280
+ def self.each
281
+ "/proc".each_entry do |d|
282
+ if d._d? && d.basename =~ /^\d+$/ && (d / "environ")._rf?
283
+ yield ProcElem.new(d.basename.to_i)
284
+ end
285
+ end
286
+ end
287
+ def self.trapChild
288
+ trap :CHLD do
289
+ pid, ps = Process.wait2
290
+ ProcElem.allList[pid] && ProcElem.allList[pid].setProcessStatus(ps)
291
+ end
292
+ end
293
+ end
294
+
295
+
296
+ class String
297
+ def procInfo (prg = nil)
298
+ if exist?
299
+ info = ProcInfo.pid(read.strip_comment.to_i)
300
+ if info && info.prog == prg
301
+ return info
302
+ end
303
+ end
304
+ return nil
305
+ end
306
+ def openingProcInfo
307
+ ret = []
308
+ %W{/usr/sbin/lsof #{self}}.read_each_line_p do |ln|
309
+ ret.push ProcInfo.pid(ln.strip[1].to_i)
310
+ end
311
+ ret
312
+ end
313
+ end
314
+