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,164 @@
1
+ # Author:: Nicolas Despres <nicolas.despres@epita.fr>.
2
+ # Copyright:: Copyright (c) 2004 TTK Team. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ # $LastChangedBy: polrop $
6
+ # $Id: testrunner.rb 197 2005-04-12 14:00:10Z polrop $
7
+
8
+
9
+ require 'test/unit/ui/testrunnermediator'
10
+ require 'test/unit/ui/testrunnerutilities'
11
+ require 'dtime'
12
+
13
+
14
+ module Test
15
+
16
+ module Unit
17
+
18
+ module UI
19
+
20
+ module Yaml
21
+
22
+ class TestRunner
23
+ extend TestRunnerUtilities
24
+
25
+ public
26
+ def initialize(suite, output_level=NORMAL, io=STDOUT)
27
+ if (suite.respond_to?(:suite))
28
+ @suite = suite.suite
29
+ else
30
+ @suite = suite
31
+ end
32
+ @output_level = output_level
33
+ @io = io
34
+ @failures = []
35
+ @errors = []
36
+ end
37
+
38
+ # Begins the test run.
39
+ public
40
+ def start
41
+ setup_mediator
42
+ attach_to_mediator
43
+ return start_mediator
44
+ end
45
+
46
+ private
47
+ def setup_mediator
48
+ @mediator = create_mediator(@suite)
49
+ suite_name = @suite.to_s
50
+ if ( @suite.kind_of?(Module) )
51
+ suite_name = @suite.name
52
+ end
53
+ @io.puts('---')
54
+ @io.puts("suite_class: #{suite_name}")
55
+ @io.puts('details:') if $VERBOSE
56
+ @test_outcome = 'S'
57
+ end
58
+
59
+ private
60
+ def create_mediator(suite)
61
+ return TestRunnerMediator.new(suite)
62
+ end
63
+
64
+ private
65
+ def attach_to_mediator
66
+ @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
67
+ @mediator.add_listener(TestRunnerMediator::STARTED,
68
+ &method(:started))
69
+ @mediator.add_listener(TestRunnerMediator::FINISHED,
70
+ &method(:finished))
71
+ if $VERBOSE
72
+ @mediator.add_listener(TestCase::STARTED,
73
+ &method(:test_started))
74
+ @mediator.add_listener(TestCase::FINISHED,
75
+ &method(:test_finished))
76
+ end
77
+ end
78
+
79
+ private
80
+ def test_started(name)
81
+ @test_start_time = Time.now
82
+ @io.print(" #{name}:")
83
+ @io.flush
84
+ end
85
+
86
+ private
87
+ def test_finished(name)
88
+ #FIXME: remove the double-quote when the TTK Dumper manages oneline
89
+ # feature
90
+ @io.puts(" \"[ #@test_outcome, #{Time.now - @test_start_time} ]\"")
91
+ @test_outcome = 'S'
92
+ @io.flush
93
+ end
94
+
95
+ private
96
+ def start_mediator
97
+ return @mediator.run_suite
98
+ end
99
+
100
+ private
101
+ def add_fault(fault)
102
+ case fault.class.to_s
103
+ when 'Test::Unit::Failure'
104
+ @test_outcome = 'F'
105
+ @failures << fault
106
+ when 'Test::Unit::Error'
107
+ @test_outcome = 'E'
108
+ @errors << fault
109
+ else
110
+ raise(Exception, 'unexpected fault!!')
111
+ end
112
+ end
113
+
114
+ private
115
+ def started(result)
116
+ @result = result
117
+ end
118
+
119
+ private
120
+ def finished(elapsed_time)
121
+ t = DTime.new(elapsed_time)
122
+ @io.puts("elapsed_time: #{t}")
123
+ if $VERBOSE
124
+ @io.puts("detail_elpased_time: #{t.inspect}")
125
+ end
126
+ @io.puts("tests_number: #{@result.run_count}")
127
+ @io.puts("assertions_number: #{@result.assertion_count}")
128
+ @io.puts("errors_number: #{@errors.length}")
129
+ @io.puts("failures_number: #{@failures.length}")
130
+ unless @failures.empty?
131
+ @io.puts('failures:')
132
+ @failures.each { |fault| print_fault(fault) }
133
+ end
134
+ unless @errors.empty?
135
+ @io.puts('errors:')
136
+ @errors.each { |err| print_fault(err) }
137
+ end
138
+ @io.flush
139
+ end
140
+
141
+ private
142
+ def print_fault(fault)
143
+ fault_disp = fault.long_display.split("\n")
144
+ indent = ' '
145
+ @io.puts("#{indent}#{fault_disp[1].chomp(':')}: |")
146
+ for i in 2...fault_disp.length do
147
+ 2.times { @io.print(indent) }
148
+ @io.puts(fault_disp[i].strip)
149
+ end
150
+ end
151
+
152
+ end # class TestRunner
153
+
154
+ end # module Yaml
155
+
156
+ end # module UI
157
+
158
+ end # module Unit
159
+
160
+ end # module Test
161
+
162
+ Test::Unit::AutoRunner::RUNNERS[:yaml] = lambda do |r|
163
+ Test::Unit::UI::Yaml::TestRunner
164
+ end
@@ -0,0 +1,10 @@
1
+ class Thread
2
+
3
+ alias :raise_without_exception_call :raise
4
+
5
+ def raise ( exc, *a, &b )
6
+ exc = exc.exception if exc.respond_to? :exception
7
+ raise_without_exception_call(exc, *a, &b)
8
+ end
9
+
10
+ end
@@ -0,0 +1,81 @@
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: timeout_ex.rb 186 2005-04-03 00:07:45Z ertai $
7
+
8
+
9
+ require 'thread'
10
+
11
+
12
+ module TimeoutEx
13
+
14
+ class Error < Interrupt; end
15
+
16
+ module_function
17
+ def timeout(sec, exception=Error, mutex=nil, &block)
18
+ if sec > 0
19
+ thread = Thread.new(mutex) do |mutex|
20
+ Thread.current[:timeout_mutex] = mutex
21
+ block[]
22
+ end
23
+ sleep(sec)
24
+ if thread.alive?
25
+ unless mutex.nil?
26
+ mutex.synchronize { thread.kill if thread.alive? }
27
+ else
28
+ thread.kill
29
+ end
30
+ raise(exception, 'execution expired')
31
+ end
32
+ else
33
+ block[]
34
+ end
35
+ true
36
+ end
37
+
38
+ end # module TimeoutEx
39
+
40
+
41
+ if defined? TEST_MODE or __FILE__ == $0
42
+
43
+
44
+ require 'test/unit/ui/yaml/testrunner'
45
+
46
+
47
+ class TimeoutExTest < Test::Unit::TestCase
48
+
49
+ def test_timeout
50
+ run = false
51
+ assert_raises(TimeoutEx::Error) do
52
+ TimeoutEx.timeout(0.1) do
53
+ sleep(0.5)
54
+ run = true
55
+ end
56
+ end
57
+ assert(! run)
58
+ end
59
+
60
+ def test_mutex
61
+ run = false
62
+ assert_raises(TimeoutEx::Error) do
63
+ TimeoutEx.timeout(0.1, TimeoutEx::Error, Mutex.new) do
64
+ Thread.current[:timeout_mutex].synchronize do
65
+ sleep(0.5)
66
+ run = true
67
+ end
68
+ end
69
+ end
70
+ assert(run)
71
+ end
72
+
73
+ def test_no_timeout
74
+ assert(TimeoutEx.timeout(0.1) { nil })
75
+ end
76
+
77
+ end # class TimeoutExTest
78
+
79
+
80
+ end
81
+
@@ -0,0 +1,73 @@
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: top_down.rb 53 2004-12-02 22:24:03Z ertai $
7
+
8
+
9
+ class Object
10
+
11
+ def top_down(&block)
12
+ yield self
13
+ end
14
+
15
+ def top_down_map(&block)
16
+ yield self
17
+ end
18
+
19
+ end
20
+
21
+
22
+ class Hash
23
+
24
+ def top_down(&block)
25
+ yield self
26
+ each { |k,v| v.top_down(&block) }
27
+ end
28
+
29
+ def top_down_map(&block)
30
+ yield self
31
+ res = {}
32
+ each { |k,v| res[k] = v.top_down_map(&block) }
33
+ res
34
+ end
35
+
36
+ end
37
+
38
+
39
+ class Array
40
+
41
+ def top_down(&block)
42
+ yield self
43
+ each { |x| x.top_down(&block) }
44
+ end
45
+
46
+ def top_down_map(&block)
47
+ yield self
48
+ res = []
49
+ each { |x| res << x.top_down_map(&block) }
50
+ res
51
+ end
52
+
53
+ end
54
+
55
+
56
+ #
57
+ # Driver
58
+ #
59
+
60
+
61
+ #FIXME: make me unit test instead of mini-driver
62
+
63
+ if __FILE__ == $0
64
+
65
+ a = { 'toto' => [ 1, 2, 3 ], 'tata' => { 'foo' => 42, 'bar' => 43 } }
66
+
67
+ a.top_down { |x| p x }
68
+
69
+ b = a.top_down_map { |x| x.is_a?(Numeric) ? x + 1 : x }
70
+
71
+ p b
72
+
73
+ end
@@ -0,0 +1,26 @@
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: trace.rb 90 2005-01-09 22:09:32Z polrop $
7
+
8
+
9
+ module Kernel
10
+
11
+ def trace_on
12
+ set_trace_func proc { |event, file, line, id, binding, classname|
13
+ printf("%8s %s:%-2d %10s %8s\n",
14
+ event,
15
+ file,
16
+ line,
17
+ id,
18
+ classname)
19
+ }
20
+ end
21
+
22
+ def trace_off
23
+ set_trace_func nil
24
+ end
25
+
26
+ end # module Kernel
@@ -0,0 +1,81 @@
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: druby.rb 140 2005-01-29 15:05:09Z polrop $
7
+
8
+
9
+ require 'uri'
10
+
11
+
12
+ module URI
13
+
14
+ class DRuby < Generic
15
+
16
+ SCHEME = 'druby'
17
+ DEFAULT_HOST = 'localhost'
18
+ DEFAULT_PORT = 0
19
+ DEFAULT_QUERY = ''
20
+ COMPONENT = [ :scheme, :host, :port ].freeze
21
+
22
+ def self.build(args)
23
+ if args.is_a?(Array)
24
+ args << DEFAULT_HOST if args.size < 1
25
+ args << DEFAULT_PORT if args.size < 2
26
+ elsif args.is_a?(Hash)
27
+ args[:host] = DEFAULT_HOST if args[:host].nil?
28
+ args[:port] = DEFAULT_PORT if args[:port].nil?
29
+ end
30
+ return super(Util::make_components_hash(self, args))
31
+ end
32
+
33
+ #FIXME: find a way to always print the port even if it is the default one.
34
+
35
+ end # class DRuby
36
+
37
+ @@schemes[DRuby::SCHEME.upcase] = DRuby
38
+
39
+ end # module URI
40
+
41
+
42
+ if defined? TEST_MODE or __FILE__ == $0
43
+
44
+
45
+ require 'test/unit/ui/yaml/testrunner'
46
+
47
+
48
+ module URI
49
+
50
+ class DRubyTest < ::Test::Unit::TestCase
51
+
52
+ def test_classic
53
+ uri = URI.parse('druby://www.foo.com:42000')
54
+ assert(uri.is_a?(DRuby))
55
+ assert_equal('druby', uri.scheme)
56
+ assert_nil(uri.user)
57
+ assert_nil(uri.password)
58
+ assert_nil(uri.userinfo)
59
+ assert_equal('www.foo.com', uri.host)
60
+ assert_equal(42000, uri.port)
61
+ assert_equal('druby://www.foo.com:42000', uri.to_s)
62
+ end
63
+
64
+ def test_build
65
+ assert_equal('druby://localhost', DRuby.build([]).to_s)
66
+ assert_equal('druby://www.foo.com:52000',
67
+ DRuby.build(['www.foo.com', 52000 ]).to_s)
68
+ end
69
+
70
+ def test_query
71
+ uri = DRuby.build(['www.foo.com', 52000 ])
72
+ uri.query = 'toto=tata&foo=bar'
73
+ assert_equal('druby://www.foo.com:52000?toto=tata&foo=bar', uri.to_s)
74
+ end
75
+
76
+ end # class DRubyTest
77
+
78
+ end # module URI
79
+
80
+
81
+ end
@@ -0,0 +1,65 @@
1
+ # Copyright: Copyright (c) 2005 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: file.rb 213 2005-05-06 12:55:58Z ertai $
7
+
8
+ require 'uri_ex'
9
+
10
+ module URI
11
+
12
+ class File < Generic
13
+
14
+ COMPONENT = [
15
+ :scheme,
16
+ :path
17
+ ].freeze
18
+
19
+ def initialize ( *args )
20
+ super
21
+ unless @host.nil? or @host.empty?
22
+ raise ArgumentError,
23
+ "You cannot neither setup a host (#{@host}), nor a relative path"
24
+ end
25
+ end
26
+
27
+ def self.build ( args )
28
+ tmp = Util::make_components_hash(self, args)
29
+ return super(tmp)
30
+ end
31
+
32
+ def checkout
33
+ p = self.pathname
34
+ raise CheckoutError, to_s unless p.exist?
35
+ p
36
+ end
37
+
38
+ def commit ( aPath )
39
+ FileUtils.cp aPath.to_s, self.pathname.to_s
40
+ end
41
+
42
+ def save
43
+ p = self.pathname
44
+ raise SaveError, to_s unless p.exist?
45
+ if p.directory?
46
+ out = TempPath.new('save', "#{p.basename}.tar.gz")
47
+ cmd = "tar czf #{out} #{p}"
48
+ unless system cmd
49
+ raise SaveError, "command failed: `#{cmd}' => #{$?}"
50
+ end
51
+ else
52
+ out = TempPath.new('save', "#{p.basename}.gz")
53
+ cmd = "gzip -c #{p} > #{out}"
54
+ unless system cmd
55
+ raise SaveError, "command failed: `#{cmd}' => #{$?}"
56
+ end
57
+ end
58
+ out
59
+ end
60
+
61
+ end # class File
62
+
63
+ @@schemes['FILE'] = File
64
+
65
+ end # module URI