vcs 0.1 → 0.2.148

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 (132) hide show
  1. data/Rakefile +17 -3
  2. data/bin/vcs +57 -34
  3. data/doc/jamis.rb +564 -0
  4. data/ruby_ex/abstract.rb +254 -0
  5. data/ruby_ex/abstract_node.rb +85 -0
  6. data/ruby_ex/algorithms/simulated_annealing.rb +140 -0
  7. data/ruby_ex/array_each_pair.rb +18 -0
  8. data/ruby_ex/ask.rb +101 -0
  9. data/ruby_ex/attributed_class.rb +302 -0
  10. data/ruby_ex/cache.rb +373 -0
  11. data/ruby_ex/checkout.rb +12 -0
  12. data/ruby_ex/choose.rb +271 -0
  13. data/ruby_ex/commands.rb +18 -0
  14. data/ruby_ex/commands/command.rb +401 -0
  15. data/ruby_ex/commands/datas.rb +16 -0
  16. data/ruby_ex/commands/datas/data.rb +33 -0
  17. data/ruby_ex/commands/datas/factory.rb +66 -0
  18. data/ruby_ex/commands/factory.rb +66 -0
  19. data/ruby_ex/commands/helpers.rb +67 -0
  20. data/ruby_ex/commands/pipe.rb +64 -0
  21. data/ruby_ex/commands/runners.rb +17 -0
  22. data/ruby_ex/commands/runners/exec.rb +49 -0
  23. data/ruby_ex/commands/runners/fork.rb +97 -0
  24. data/ruby_ex/commands/runners/runner.rb +107 -0
  25. data/ruby_ex/commands/seq.rb +27 -0
  26. data/ruby_ex/config_file.rb +96 -0
  27. data/ruby_ex/const_regexp.rb +59 -0
  28. data/ruby_ex/daemon.rb +134 -0
  29. data/ruby_ex/diff.rb +667 -0
  30. data/ruby_ex/dlogger.rb +62 -0
  31. data/ruby_ex/drb/dispatcher.rb +252 -0
  32. data/ruby_ex/drb/dispatcher_server_test.rb +29 -0
  33. data/ruby_ex/drb/drb_observable.rb +97 -0
  34. data/ruby_ex/drb/drb_observable_pool.rb +27 -0
  35. data/ruby_ex/drb/drb_service.rb +43 -0
  36. data/ruby_ex/drb/drb_undumped_attributes.rb +55 -0
  37. data/ruby_ex/drb/drb_undumped_indexed_object.rb +54 -0
  38. data/ruby_ex/drb/insecure_protected_methods.rb +103 -0
  39. data/ruby_ex/drb/session_client_test.rb +40 -0
  40. data/ruby_ex/drb/session_manager.rb +246 -0
  41. data/ruby_ex/drb/session_server.rb +53 -0
  42. data/ruby_ex/dtime.rb +143 -0
  43. data/ruby_ex/dumpable_proc.rb +63 -0
  44. data/ruby_ex/exception.rb +32 -0
  45. data/ruby_ex/filetype.rb +229 -0
  46. data/ruby_ex/fileutils_ex.rb +44 -0
  47. data/ruby_ex/fold.rb +58 -0
  48. data/ruby_ex/generate_id.rb +44 -0
  49. data/ruby_ex/hookable.rb +262 -0
  50. data/ruby_ex/hooker.rb +54 -0
  51. data/ruby_ex/inactive_timeout.rb +137 -0
  52. data/ruby_ex/indexed_node.rb +66 -0
  53. data/ruby_ex/io_marshal.rb +100 -0
  54. data/ruby_ex/ioo.rb +194 -0
  55. data/ruby_ex/labeled_node.rb +63 -0
  56. data/ruby_ex/logger_observer.rb +23 -0
  57. data/ruby_ex/md5sum.rb +66 -0
  58. data/ruby_ex/mktemp.rb +208 -0
  59. data/ruby_ex/module/attr_once.rb +36 -0
  60. data/ruby_ex/module/autoload_tree.rb +75 -0
  61. data/ruby_ex/module/hierarchy.rb +335 -0
  62. data/ruby_ex/module/instance_method_visibility.rb +73 -0
  63. data/ruby_ex/module_ex.rb +11 -0
  64. data/ruby_ex/node.rb +80 -0
  65. data/ruby_ex/object_monitor.rb +145 -0
  66. data/ruby_ex/object_monitor_activity.rb +33 -0
  67. data/ruby_ex/observable.rb +140 -0
  68. data/ruby_ex/observable_pool.rb +293 -0
  69. data/ruby_ex/orderedhash.rb +252 -0
  70. data/ruby_ex/pathname_ex.rb +152 -0
  71. data/ruby_ex/pp_hierarchy.rb +29 -0
  72. data/ruby_ex/pseudo_cache.rb +190 -0
  73. data/ruby_ex/queue.rb +56 -0
  74. data/ruby_ex/random_generators.rb +25 -0
  75. data/ruby_ex/random_generators/random_generator.rb +31 -0
  76. data/ruby_ex/random_generators/ruby.rb +23 -0
  77. data/ruby_ex/safe_eval.rb +348 -0
  78. data/ruby_ex/sendmail.rb +215 -0
  79. data/ruby_ex/service_manager.rb +121 -0
  80. data/ruby_ex/session/administrable.rb +120 -0
  81. data/ruby_ex/session/client.rb +153 -0
  82. data/ruby_ex/session/const.rb +18 -0
  83. data/ruby_ex/session/dispatcher.rb +184 -0
  84. data/ruby_ex/session/error.rb +21 -0
  85. data/ruby_ex/session/fetchable.rb +57 -0
  86. data/ruby_ex/session/fetcher.rb +62 -0
  87. data/ruby_ex/session/hookable.rb +26 -0
  88. data/ruby_ex/session/profile.rb +110 -0
  89. data/ruby_ex/session/server.rb +582 -0
  90. data/ruby_ex/session/test/administrable_test.rb +337 -0
  91. data/ruby_ex/session/test/basic_test.rb +523 -0
  92. data/ruby_ex/session/test/dispatcher_test.rb +409 -0
  93. data/ruby_ex/session/test/fetchable_test.rb +119 -0
  94. data/ruby_ex/session/test/sub_server_test.rb +188 -0
  95. data/ruby_ex/shuffle.rb +30 -0
  96. data/ruby_ex/spring.rb +136 -0
  97. data/ruby_ex/spring_set.rb +137 -0
  98. data/ruby_ex/string_ex.rb +28 -0
  99. data/ruby_ex/symtbl.rb +106 -0
  100. data/ruby_ex/synflow.rb +474 -0
  101. data/ruby_ex/test/unit/ui/yaml/testrunner.rb +164 -0
  102. data/ruby_ex/thread_mutex.rb +10 -0
  103. data/ruby_ex/timeout_ex.rb +81 -0
  104. data/ruby_ex/top_down.rb +73 -0
  105. data/ruby_ex/trace.rb +26 -0
  106. data/ruby_ex/uri/druby.rb +81 -0
  107. data/ruby_ex/uri/file.rb +65 -0
  108. data/ruby_ex/uri/ftp_ex.rb +37 -0
  109. data/ruby_ex/uri/http_ex.rb +43 -0
  110. data/ruby_ex/uri/ssh.rb +92 -0
  111. data/ruby_ex/uri/svn.rb +118 -0
  112. data/ruby_ex/uri_ex.rb +45 -0
  113. data/ruby_ex/verbose_object.rb +30 -0
  114. data/ruby_ex/version.rb +66 -0
  115. data/ruby_ex/yaml/basenode_ext.rb +63 -0
  116. data/ruby_ex/yaml/chop_header.rb +23 -0
  117. data/ruby_ex/yaml/transform.rb +449 -0
  118. data/ruby_ex/yaml/yregexpath.rb +76 -0
  119. data/src/changelog.rb +28 -18
  120. data/src/conflict.rb +20 -0
  121. data/src/diff.rb +18 -0
  122. data/src/diffstat.rb +9 -3
  123. data/src/last_changed_date.rb +18 -0
  124. data/src/mail.rb +33 -65
  125. data/src/message.rb +15 -9
  126. data/src/mycommit.rb +29 -14
  127. data/src/news.rb +24 -3
  128. data/src/status.rb +17 -0
  129. data/src/svn.rb +2 -2
  130. data/src/vcs.rb +24 -3
  131. metadata +124 -5
  132. data/lrdetools.rb +0 -12
@@ -0,0 +1,62 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Pouillard. All rights reserved.
2
+ # Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: polrop $
6
+ # $Id: dlogger.rb 99 2005-01-13 19:14:44Z polrop $
7
+
8
+ require 'logger'
9
+
10
+ # This Logger subclass permit to use more debug levels
11
+ #
12
+ # log = DLogger.new(STDERR)
13
+ # log.level = -1
14
+ # log.debug1 "You see me"
15
+ # log.debug2 "You see me"
16
+ # log.debug3 "You don't see me"
17
+ #
18
+ class DLogger < Logger
19
+
20
+ def format_severity ( severity )
21
+ return super if severity >= 0
22
+ return "DEBUG#{severity.abs + 1}"
23
+ end
24
+ private :format_severity
25
+
26
+ def method_missing ( meth, progname=nil, *args, &block )
27
+ return super unless meth.to_s =~ /^debug(\d+)$/ or !args.empty
28
+ add(-$1.to_i + 1, nil, progname, &block)
29
+ end
30
+
31
+ Format = "%s, [%s#%d] %6s -- %s: %s\n"
32
+ def format_message(severity, timestamp, msg, progname)
33
+ Format % [severity[0..0], timestamp, $$, severity, progname, msg]
34
+ end
35
+ private :format_message
36
+
37
+ end # class DLogger
38
+
39
+
40
+ if defined? TEST_MODE or $0 == __FILE__
41
+
42
+ require 'stringio'
43
+ require 'test/unit'
44
+
45
+ class DLoggerTest < Test::Unit::TestCase
46
+
47
+ def test1
48
+ cout = StringIO.new
49
+ log = DLogger.new(cout)
50
+ log.level = -1
51
+ log.debug1 'You see me'
52
+ log.debug3 'You don\'t see me'
53
+ log.debug2 'You see me'
54
+ cout.rewind
55
+ ref = /D, \[\d+-\d+-\d+.\d+:\d+:\d+\.\d+ #\d+\] DEBUG -- : You see me
56
+ D, \[\d+-\d+-\d+.\d+:\d+:\d+\.\d+ #\d+\] DEBUG2 -- : You see me/
57
+ assert_match(ref, cout.readlines.join)
58
+ end
59
+
60
+ end # class DLoggerTest
61
+
62
+ end
@@ -0,0 +1,252 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: ertai $
6
+ # $Id: dispatcher.rb 186 2005-04-03 00:07:45Z ertai $
7
+
8
+
9
+ require 'drb/drb'
10
+
11
+
12
+ module DRb
13
+
14
+ class Dispatcher
15
+
16
+ URIS = []
17
+ MAX_JOB = 5
18
+ MAX_JOB_LIMIT = 100
19
+ DRB_OBJECT_CLASS = DRbObject
20
+
21
+ attr_reader :max_job
22
+
23
+ def initialize(uris=URIS,
24
+ max_job=MAX_JOB,
25
+ drb_object_class=DRB_OBJECT_CLASS,
26
+ *args,
27
+ &block)
28
+ unless 1 <= max_job && max_job <= MAX_JOB_LIMIT
29
+ raise(ArgumentError,
30
+ "`#{max_job}' - too big max job (must be <= #{MAX_JOB_LIMIT})")
31
+ end
32
+ @max_job = max_job
33
+ @uris = {}
34
+ uris.each { |uri| add(uri, drb_object_class, *args, &block) }
35
+ end
36
+
37
+ def [](uri)
38
+ @uris[uri]
39
+ end
40
+
41
+ def add(uri, drb_object_class, *args, &block)
42
+ @uris[uri] = drb_object_class.new(nil, uri, *args, &block)
43
+ end
44
+
45
+ def del(uri)
46
+ @uris.delete(uri)
47
+ end
48
+
49
+ def each
50
+ @uris.each { |uri, ro| yield(uri, ro) }
51
+ end
52
+
53
+ def dispatch(ros, meth, *args, &block)
54
+ result = {}
55
+ nb_threads = [ ros.size, @max_job].min
56
+ if nb_threads == 1
57
+ res = request(ros[0], meth, *args, &block)
58
+ result.update(res)
59
+ else
60
+ mutex = Mutex.new
61
+ threads = []
62
+ ros_q = ros.dup
63
+ nb_threads.times do
64
+ threads << Thread.new do
65
+ loop do
66
+ ro = mutex.synchronize { ros_q.shift }
67
+ break if ro.nil?
68
+ res = request(ro, meth, *args, &block)
69
+ mutex.synchronize { result.update(res) }
70
+ end
71
+ end
72
+ end
73
+ threads.each { |thread| thread.join }
74
+ end
75
+ result
76
+ end
77
+
78
+ alias update dispatch
79
+
80
+ def select(&comp)
81
+ ros = []
82
+ each { |uri, ro| ros << ro if comp[ro] }
83
+ ros
84
+ end
85
+
86
+ def select_all
87
+ select { |ro| true }
88
+ end
89
+
90
+ def select_by(result, meth, *args, &block)
91
+ select { |ro| test_ro_attribut(ro, result, meth, *args, &block) }
92
+ end
93
+
94
+ def multi_select_by(hash, init_val=true, &bool_fun)
95
+ select do |ro|
96
+ ret = init_val
97
+ hash.each do |k, v|
98
+ ret = bool_fun[ret, test_ro_attribut(ro, v, k)]
99
+ end
100
+ ret
101
+ end
102
+ end
103
+
104
+ def and_multi_select_by(hash)
105
+ select do |ro|
106
+ ret = true
107
+ hash.each do |k, v|
108
+ ret = (ret and test_ro_attribut(ro, v, k))
109
+ end
110
+ ret
111
+ end
112
+ end
113
+
114
+ def or_multi_select_by(hash)
115
+ select do |ro|
116
+ ret = false
117
+ hash.each { |k, v| ret = (ret or test_ro_attribut(ro, v, k)) }
118
+ ret
119
+ end
120
+ end
121
+
122
+ def dispatch_all(meth, *args, &block)
123
+ dispatch(select_all, meth, *args, &block)
124
+ end
125
+
126
+ def method_missing(meth, *args, &block)
127
+ dispatch_all(meth, *args, &block)
128
+ end
129
+
130
+ def request(ro, meth, *args, &block)
131
+ res = nil
132
+ begin
133
+ res = ro.send(meth, *args, &block)
134
+ rescue Exception => err
135
+ res = err
136
+ end
137
+ { ro.__drburi => res }
138
+ end
139
+
140
+ protected
141
+ def test_ro_attribut(ro, result, meth, *args, &block)
142
+ res = request(ro, meth, *args, &block)
143
+ if result.is_a? Regexp
144
+ res[ro.__drburi].to_s =~ result
145
+ else
146
+ res[ro.__drburi] == result
147
+ end
148
+ end
149
+
150
+ end # class Dispatcher
151
+
152
+ end # module DRb
153
+
154
+
155
+ if defined? TEST_MODE or $0 == __FILE__
156
+
157
+
158
+ require 'test/unit/ui/yaml/testrunner'
159
+ require 'rbconfig'
160
+ require 'drb/session_manager'
161
+
162
+ module DRb
163
+
164
+ class DispatcherTest < ::Test::Unit::TestCase
165
+
166
+ class MyDRbObject < DRbObject
167
+
168
+ attr_reader :uri, :hostname, :port, :protocol
169
+
170
+ def initialize(obj, uri=nil)
171
+ super
172
+ if uri =~ /(^.*?):\/\/(.*?):(\d*)$/
173
+ @protocol = $1
174
+ @hostname = $2
175
+ @port = $3.to_i
176
+ end
177
+ end
178
+
179
+ end
180
+
181
+ #
182
+ # Tests
183
+ #
184
+ def test_multi_select_by
185
+ n = 5
186
+ uris = []
187
+ for i in 0...n do
188
+ uris << "druby://localhost:#{42000 + i * 100}"
189
+ end
190
+ d = nil
191
+ assert_nothing_raised { d = Dispatcher.new(uris, 1, MyDRbObject) }
192
+ assert_not_nil(d)
193
+
194
+ h1 = { :port => 42000, :hostname => 'localhost' }
195
+ r1 = d.and_multi_select_by(h1)
196
+ assert_equal(1, r1.size)
197
+ assert_equal(d['druby://localhost:42000'], r1[0])
198
+ r2 = d.multi_select_by(h1) { |a, b| (a and b) }
199
+ assert_equal(1, r2.size)
200
+ assert_equal(r1, r2)
201
+ r1 = d.or_multi_select_by(h1)
202
+ r2 = d.multi_select_by(h1, false) { |a, b| (a or b) }
203
+ assert_equal(r1, r2)
204
+ end
205
+
206
+ def test_dispatch
207
+ name, ruby_bin, chdir = add_command
208
+ drb_session_manager = SessionManager.new
209
+ server = DRb.start_service('druby://localhost:0', drb_session_manager)
210
+ services = []
211
+ uris = []
212
+ nb_srv = 10
213
+ nb_srv.times do |i|
214
+ service = drb_session_manager.service(name)
215
+ uris << service.server.uri
216
+ services << service
217
+ end
218
+ until (n = drb_session_manager.nb_sessions) == nb_srv
219
+ STDERR.puts "wait for #{n} sessions started" if $VERBOSE
220
+ sleep(2)
221
+ end
222
+ d = Dispatcher.new(uris, 5, MyDRbObject)
223
+ ref = {}
224
+ uris.each { |uri| ref[uri] = "hello from #{uri}" }
225
+ assert(ref, d.hello)
226
+ services.each do |service|
227
+ service.stop_service
228
+ end
229
+ while (n = drb_session_manager.nb_sessions) > 0
230
+ STDERR.puts "wait for #{n} sessions stoped" if $VERBOSE
231
+ sleep(2)
232
+ end
233
+ server.stop_service
234
+ end
235
+
236
+ protected
237
+ def add_command
238
+ ruby_bin = Config::CONFIG["RUBY_INSTALL_NAME"]
239
+ ruby_bin += ' -w' if $VERBOSE
240
+ name = "dispatcher_server_test"
241
+ chdir = (defined? TEST_MODE) ? "cd src;" : ''
242
+ cmd = chdir + "#{ruby_bin} drb/#{name}.rb"
243
+ DRb::SessionManager.command[name] = cmd
244
+ [ name, ruby_bin, chdir ]
245
+ end
246
+
247
+ end # DispatcherTest
248
+
249
+ end # module DRb
250
+
251
+
252
+ end
@@ -0,0 +1,29 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: polrop $
6
+ # $Id: dispatcher_server_test.rb 94 2005-01-10 14:52:36Z polrop $
7
+
8
+
9
+ require 'drb/session_server'
10
+
11
+ if __FILE__ == $0
12
+
13
+ class Foo
14
+
15
+ def hello
16
+ "hello from #{DRb.uri}"
17
+ end
18
+
19
+ end
20
+
21
+ raise "usage: #{$0} <uri> <name>" unless ARGV.size == 2
22
+ uri = ARGV.shift
23
+ name = ARGV.shift
24
+
25
+ server = DRb::DRbServer.new("druby://localhost:0", Foo.new, {})
26
+ ext_srv = DRb::SessionServer.new(uri, name, server)
27
+ server.thread.join
28
+
29
+ end
@@ -0,0 +1,97 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: polrop $
6
+ # $Id: drb_observable.rb 100 2005-01-15 07:45:14Z polrop $
7
+
8
+
9
+ require 'drb/observer'
10
+
11
+ require 'observable'
12
+
13
+
14
+ module DRb
15
+
16
+ module DRbObservable
17
+ include Observable
18
+
19
+ undef notify_observers
20
+ def notify_observers(*args, &block)
21
+ if defined? @observer_state and @observer_state
22
+ if defined? @observer_peers
23
+ for i in @observer_peers.dup
24
+ begin
25
+ i.update(*args, &block)
26
+ rescue
27
+ delete_observer(i)
28
+ end
29
+ end
30
+ end
31
+ @observer_state = false
32
+ end
33
+ end
34
+
35
+ def notify_observer(observer, *arg, &block)
36
+ if defined? @observer_state and @observer_state
37
+ if defined? @observer_peers
38
+ if @observer_peers.include?(observer)
39
+ begin
40
+ observer.update(*arg, &block)
41
+ rescue
42
+ delete_observer(observer)
43
+ end
44
+ end
45
+ end
46
+ @observer_state = false
47
+ end
48
+ end
49
+
50
+ end # module DRbObservable
51
+
52
+ end # module DRb
53
+
54
+
55
+ if defined? TEST_MODE or __FILE__ == $0
56
+
57
+
58
+ require 'test/unit/ui/yaml/testrunner'
59
+
60
+
61
+ module DRb
62
+
63
+ class ObservablePoolTest < ::Test::Unit::TestCase
64
+
65
+ class Obsv
66
+ include DRbObservable
67
+
68
+ end
69
+
70
+ class Foo
71
+
72
+ def update(*args, &block)
73
+ raise 'toto'
74
+ end
75
+
76
+ end
77
+
78
+ def test_simple
79
+ o = Obsv.new
80
+ assert_respond_to(o, :list_observers)
81
+ o.add_observer(Foo.new)
82
+ assert_equal(1, o.count_observers)
83
+ o.changed
84
+ o.notify_observers('msg')
85
+ assert_equal(0, o.count_observers)
86
+ end
87
+
88
+
89
+ end # class ObservablePoolTest
90
+
91
+ end # module DRb
92
+
93
+
94
+ end
95
+
96
+
97
+
@@ -0,0 +1,27 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: polrop $
6
+ # $Id: drb_observable_pool.rb 97 2005-01-13 18:20:49Z polrop $
7
+
8
+
9
+ require 'observable_pool'
10
+
11
+ require 'drb/drb_observable'
12
+
13
+
14
+ module DRb
15
+
16
+ class DRbObservablePool
17
+
18
+ class SyncObserver
19
+ include DRbObservable
20
+
21
+ end # class SyncObserver
22
+
23
+ end # class DRbObservable
24
+
25
+ end # module DRb
26
+
27
+