vcs 0.1 → 0.2.148

Sign up to get free protection for your applications and to get access to all the features.
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,137 @@
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: inactive_timeout.rb 92 2005-01-10 12:23:55Z polrop $
7
+
8
+
9
+ require 'thread'
10
+
11
+
12
+ module InactiveTimeout
13
+
14
+ def inactive_timeout_initialize(inactive_timeout=0)
15
+ @inactive_timeout = inactive_timeout
16
+ @inactive_timeout_update_time = Time.now
17
+ @inactive_timeout_mutex = Mutex.new
18
+ if @inactive_timeout > 0
19
+ @inactive_timeout_thread = inactive_timeout_start_thread
20
+ end
21
+ end
22
+
23
+ def inactive_timeout=(inactive_timeout)
24
+ @inactive_timeout_mutex.synchronize do
25
+ @inactive_timeout = inactive_timeout
26
+ end
27
+ end
28
+
29
+ def inactive_timeout
30
+ @inactive_timeout_mutex.synchronize { @inactive_timeout }
31
+ end
32
+
33
+ def inactive_timeout_update_time
34
+ @inactive_timeout_mutex.synchronize do
35
+ @inactive_timeout_update_time
36
+ end
37
+ end
38
+
39
+ protected
40
+ def inactive_timeout_update(time=Time.now)
41
+ @inactive_timeout_mutex.synchronize do
42
+ @inactive_timeout_update_time = time
43
+ end
44
+ end
45
+
46
+ # Every @inactive_timeout seconds, this method is called if the enlapsed
47
+ # time since @inactive_timeout_update_time is greater than @inactive_timeout.
48
+ # Return true to stop the timeout thread.
49
+ protected
50
+ def inactive_timeout_callback
51
+ true
52
+ end
53
+
54
+ protected
55
+ def inactive_timeout_start_thread
56
+ Thread.new do
57
+ begin
58
+ time = @inactive_timeout_mutex.synchronize { @inactive_timeout }
59
+ while time > 0
60
+ sleep(time)
61
+ time = @inactive_timeout_mutex.synchronize do
62
+ @inactive_timeout - (Time.now - @inactive_timeout_update_time)
63
+ end
64
+ end
65
+ end until inactive_timeout_callback
66
+ end
67
+ end
68
+
69
+ end # module InactiveTimeout
70
+
71
+
72
+ if defined? TEST_MODE or __FILE__ == $0
73
+
74
+
75
+ require 'test/unit/ui/yaml/testrunner'
76
+
77
+
78
+ class InactiveTimeoutTest < Test::Unit::TestCase
79
+
80
+ class Foo
81
+ include InactiveTimeout
82
+
83
+ attr_reader :obj
84
+
85
+ def initialize(obj, inactive_timeout=0)
86
+ inactive_timeout_initialize(inactive_timeout)
87
+ @obj = obj
88
+ end
89
+
90
+ def method_missing(meth, *args, &block)
91
+ inactive_timeout_update
92
+ @obj.send(meth, *args, &block)
93
+ end
94
+
95
+ protected
96
+ def inactive_timeout_callback
97
+ @obj = nil
98
+ super
99
+ end
100
+
101
+ end
102
+
103
+ class Bar
104
+
105
+ def hello
106
+ 'hello bar'
107
+ end
108
+
109
+ end
110
+
111
+ def test_accessors
112
+ f = Foo.new(Bar.new)
113
+ assert_equal(0, f.inactive_timeout)
114
+ t0 = f.inactive_timeout_update_time
115
+ assert_equal(t0, f.inactive_timeout_update_time)
116
+ assert_equal('hello bar', f.hello)
117
+ assert(t0 < f.inactive_timeout_update_time)
118
+ assert_not_nil(f.obj)
119
+ end
120
+
121
+ def test_simple
122
+ f = Foo.new(Bar.new, 0.2)
123
+ assert_not_nil(f.obj)
124
+ assert_equal(0.2, f.inactive_timeout)
125
+ 3.times do
126
+ sleep(0.1)
127
+ assert_equal('hello bar', f.hello)
128
+ end
129
+ assert_not_nil(f.obj)
130
+ sleep(0.5)
131
+ assert_nil(f.obj)
132
+ end
133
+
134
+ end # class InactiveTimeoutTest
135
+
136
+ end
137
+
@@ -0,0 +1,66 @@
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: node.rb 171 2005-03-29 09:12:47Z polrop $
7
+
8
+
9
+ require 'abstract_node'
10
+
11
+
12
+ class IndexedNode < AbstractNode
13
+ include Concrete
14
+
15
+ def initialize(data=nil, *sub_nodes)
16
+ @sub_nodes = sub_nodes
17
+ super
18
+ end
19
+
20
+ def <<(sub_node)
21
+ check_sub_node_type(sub_node)
22
+ @sub_nodes << sub_node
23
+ end
24
+
25
+ end # class IndexedNode
26
+
27
+
28
+ if defined? TEST_MODE or __FILE__ == $0
29
+
30
+ require 'test/unit'
31
+
32
+ class IndexedNodeTest < Test::Unit::TestCase
33
+
34
+ def test_simple
35
+ s11 = IndexedNode.new(11)
36
+ s12 = IndexedNode.new(12)
37
+ s = IndexedNode.new(1, s11, s12)
38
+ assert_equal(1, s.data)
39
+ assert_equal(s11, s.sub_nodes[0])
40
+ assert_equal(s12, s.sub_nodes[1])
41
+ end
42
+
43
+ def test_crochet_equal
44
+ s = IndexedNode.new(1)
45
+ assert_nothing_raised { s[0] = IndexedNode.new(10) }
46
+ assert_raises(TypeError) { s[1] = nil }
47
+ end
48
+
49
+ def test_merge
50
+ s = IndexedNode.new(1)
51
+ s11 = IndexedNode.new(11)
52
+ s12 = IndexedNode.new(12)
53
+ s.merge!({ 0 => s11, 1 => s12 })
54
+ end
55
+
56
+ def test_chevron
57
+ s = IndexedNode.new(1)
58
+ assert_equal(0, s.size)
59
+ s << IndexedNode.new(2)
60
+ assert_equal(1, s.size)
61
+ end
62
+
63
+ end # class IndexedNodeTest
64
+
65
+ end
66
+
@@ -0,0 +1,100 @@
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: io_marshal.rb 63 2004-12-06 13:09:14Z polrop $
7
+
8
+
9
+ class IO
10
+
11
+ def dump(*objs)
12
+ objs.each do |obj|
13
+ data = Marshal.dump(obj)
14
+ write(data.size.to_s)
15
+ write("\0")
16
+ write(data)
17
+ end
18
+ end
19
+
20
+ def load(num_objs=nil, non_block=false)
21
+ objs = []
22
+ n = num_objs
23
+ begin
24
+ return nil if eof? and non_block
25
+ objs << load_one_object(non_block)
26
+ unless n.nil?
27
+ n -= 1
28
+ break if n <= 0
29
+ end
30
+ end until eof?
31
+ objs
32
+ end
33
+
34
+ def load_one_object(non_block=false)
35
+ size = ''
36
+ while (c = read(1)) != "\0" do
37
+ if c.nil?
38
+ if non_block
39
+ return nil
40
+ else
41
+ sleep(0.1)
42
+ redo
43
+ end
44
+ end
45
+ size += c
46
+ end
47
+ size = size.to_i
48
+ data = read(size)
49
+ Marshal.load(data)
50
+ end
51
+
52
+ end # class IO
53
+
54
+
55
+ #
56
+ # Unit test suite
57
+ #
58
+ if defined? TEST_MODE or $0 == __FILE__
59
+
60
+
61
+ require 'test/unit/ui/yaml/testrunner'
62
+
63
+
64
+ class IOMarshalTest < Test::Unit::TestCase
65
+
66
+ #
67
+ # Tests
68
+ #
69
+ def test_simple
70
+ obj1 = 12
71
+ obj2 = 'hello'
72
+ obj3 = { 'a' => 12, 'b' => 42 }
73
+ rd, wr = IO.pipe
74
+ if pid = fork # father
75
+ wr.close
76
+ o1, o2 = rd.load(2)
77
+ assert_equal(obj1, o1)
78
+ assert_equal(obj2, o2)
79
+ o3 = rd.load
80
+ assert_equal([obj3], o3)
81
+ assert_equal(nil, rd.load(4, true))
82
+ assert_equal(nil, rd.load_one_object(true))
83
+ Process.waitpid(pid)
84
+ rd.close
85
+ else # son
86
+ rd.close
87
+ sleep(0.5)
88
+ wr.dump(obj1)
89
+ wr.dump(obj2, obj3)
90
+ wr.close
91
+ exit
92
+ end
93
+ end
94
+
95
+
96
+ end # class IOMarshalTest
97
+
98
+
99
+ end
100
+
@@ -0,0 +1,194 @@
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: ertai $
6
+ # $Id: ioo.rb 186 2005-04-03 00:07:45Z ertai $
7
+
8
+ require 'delegate'
9
+
10
+ # With this class you can easily overwrite only write or read methods
11
+ # to change the whole IO.
12
+ #
13
+ # This is very usefull to produce a crypted IO for example.
14
+ module ImplIOO
15
+
16
+ def << ( obj )
17
+ write obj
18
+ self
19
+ end
20
+
21
+ def each ( sep_string=$/, &block )
22
+ begin
23
+ loop { block[readline(sep_string)] }
24
+ rescue EOFError
25
+ return self
26
+ end
27
+ end
28
+ alias :each_line :each
29
+
30
+ def each_byte ( &block )
31
+ begin
32
+ loop { block[readchar] }
33
+ rescue EOFError
34
+ return nil
35
+ end
36
+ end
37
+
38
+ def getc
39
+ begin
40
+ readchar
41
+ rescue EOFError
42
+ nil
43
+ end
44
+ end
45
+
46
+ def gets ( sep_string=$/ )
47
+ begin
48
+ readline(sep_string)
49
+ rescue EOFError
50
+ nil
51
+ end
52
+ end
53
+
54
+ def print ( *args )
55
+ if args.empty?
56
+ write $_
57
+ else
58
+ args.each { |x| write x }
59
+ end
60
+ nil
61
+ end
62
+
63
+ def printf ( fmt, *args )
64
+ write Kernel.sprintf(fmt, *args)
65
+ nil
66
+ end
67
+
68
+ def putc ( c )
69
+ case c
70
+ when Numeric then write c.chr
71
+ when String
72
+ if c.size == 1
73
+ write c
74
+ else
75
+ c = c[0].chr
76
+ write c
77
+ end
78
+ else
79
+ c = c.to_s[0].chr
80
+ write c
81
+ end
82
+ c
83
+ end
84
+
85
+ def puts ( *args )
86
+ if args.size == 0
87
+ write "\n"
88
+ else
89
+ args.each do |x|
90
+ x = x.to_s
91
+ write x
92
+ write "\n" unless x[-1] == ?\n
93
+ end
94
+ end
95
+ nil
96
+ end
97
+
98
+ def readchar
99
+ raise EOFError if eof?
100
+ read(1)[0]
101
+ end
102
+
103
+ def readline ( sep_string=$/ )
104
+ raise EOFError if eof?
105
+ buf = ''
106
+ begin
107
+ while (char = readchar) != ?\n
108
+ buf += char.chr
109
+ end
110
+ return buf + char.chr
111
+ rescue EOFError
112
+ return buf
113
+ end
114
+ end
115
+
116
+ def readlines ( sep_string=$/ )
117
+ res = []
118
+ each_line(sep_string) { |line| res << line }
119
+ res
120
+ end
121
+
122
+ end # module ImplIOO
123
+
124
+ class IOO < DelegateClass(IO)
125
+ include ImplIOO
126
+ end # class IOO
127
+
128
+ require 'socket'
129
+ class TCPSocket
130
+ alias :real_send :send
131
+ alias :real_recv :recv
132
+ end
133
+
134
+ class IOOTCPSocket < DelegateClass(TCPSocket)
135
+ include ImplIOO
136
+
137
+ def recv ( integer, flags=nil )
138
+ read(integer)
139
+ end
140
+
141
+ def read ( integer=nil, buffer='' )
142
+ raise ArgumentError unless buffer.is_a? String
143
+ raise NotImplementedError if integer.nil?
144
+ raise ArgumentError unless integer.is_a? Numeric
145
+ buffer += real_recv(integer, 0)
146
+ return buffer
147
+ end
148
+
149
+ def send ( obj, flags=nil )
150
+ write(obj)
151
+ end
152
+
153
+ def write ( obj )
154
+ real_send(obj.to_s, 0)
155
+ nil
156
+ end
157
+
158
+ end # class IOOTCPSocket
159
+
160
+
161
+ if defined? TEST_MODE or $0 == __FILE__
162
+
163
+ require 'mktemp'
164
+ require 'test/unit'
165
+ class TestIOO < Test::Unit::TestCase
166
+
167
+ def setup
168
+ @tmp = Tempfile.mktemp('ioo')
169
+ @tmp.open('w') do |tmp|
170
+ tmp.puts 'foo'
171
+ tmp.puts
172
+ tmp.puts 'bar'
173
+ end
174
+ @readlines = @tmp.readlines
175
+ end
176
+
177
+ def teardown
178
+ @tmp.clean
179
+ @tmp = nil
180
+ end
181
+
182
+ def test_readlines
183
+ @tmp.open do |tmp|
184
+ assert_not_nil(tmp)
185
+ f = nil
186
+ assert_nothing_raised { f = IOO.new(tmp) }
187
+ assert_not_nil(f)
188
+ assert_equal(@readlines, f.readlines)
189
+ end
190
+ end
191
+
192
+ end # class TestIOO
193
+
194
+ end