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.
- data/Rakefile +17 -3
- data/bin/vcs +57 -34
- data/doc/jamis.rb +564 -0
- data/ruby_ex/abstract.rb +254 -0
- data/ruby_ex/abstract_node.rb +85 -0
- data/ruby_ex/algorithms/simulated_annealing.rb +140 -0
- data/ruby_ex/array_each_pair.rb +18 -0
- data/ruby_ex/ask.rb +101 -0
- data/ruby_ex/attributed_class.rb +302 -0
- data/ruby_ex/cache.rb +373 -0
- data/ruby_ex/checkout.rb +12 -0
- data/ruby_ex/choose.rb +271 -0
- data/ruby_ex/commands.rb +18 -0
- data/ruby_ex/commands/command.rb +401 -0
- data/ruby_ex/commands/datas.rb +16 -0
- data/ruby_ex/commands/datas/data.rb +33 -0
- data/ruby_ex/commands/datas/factory.rb +66 -0
- data/ruby_ex/commands/factory.rb +66 -0
- data/ruby_ex/commands/helpers.rb +67 -0
- data/ruby_ex/commands/pipe.rb +64 -0
- data/ruby_ex/commands/runners.rb +17 -0
- data/ruby_ex/commands/runners/exec.rb +49 -0
- data/ruby_ex/commands/runners/fork.rb +97 -0
- data/ruby_ex/commands/runners/runner.rb +107 -0
- data/ruby_ex/commands/seq.rb +27 -0
- data/ruby_ex/config_file.rb +96 -0
- data/ruby_ex/const_regexp.rb +59 -0
- data/ruby_ex/daemon.rb +134 -0
- data/ruby_ex/diff.rb +667 -0
- data/ruby_ex/dlogger.rb +62 -0
- data/ruby_ex/drb/dispatcher.rb +252 -0
- data/ruby_ex/drb/dispatcher_server_test.rb +29 -0
- data/ruby_ex/drb/drb_observable.rb +97 -0
- data/ruby_ex/drb/drb_observable_pool.rb +27 -0
- data/ruby_ex/drb/drb_service.rb +43 -0
- data/ruby_ex/drb/drb_undumped_attributes.rb +55 -0
- data/ruby_ex/drb/drb_undumped_indexed_object.rb +54 -0
- data/ruby_ex/drb/insecure_protected_methods.rb +103 -0
- data/ruby_ex/drb/session_client_test.rb +40 -0
- data/ruby_ex/drb/session_manager.rb +246 -0
- data/ruby_ex/drb/session_server.rb +53 -0
- data/ruby_ex/dtime.rb +143 -0
- data/ruby_ex/dumpable_proc.rb +63 -0
- data/ruby_ex/exception.rb +32 -0
- data/ruby_ex/filetype.rb +229 -0
- data/ruby_ex/fileutils_ex.rb +44 -0
- data/ruby_ex/fold.rb +58 -0
- data/ruby_ex/generate_id.rb +44 -0
- data/ruby_ex/hookable.rb +262 -0
- data/ruby_ex/hooker.rb +54 -0
- data/ruby_ex/inactive_timeout.rb +137 -0
- data/ruby_ex/indexed_node.rb +66 -0
- data/ruby_ex/io_marshal.rb +100 -0
- data/ruby_ex/ioo.rb +194 -0
- data/ruby_ex/labeled_node.rb +63 -0
- data/ruby_ex/logger_observer.rb +23 -0
- data/ruby_ex/md5sum.rb +66 -0
- data/ruby_ex/mktemp.rb +208 -0
- data/ruby_ex/module/attr_once.rb +36 -0
- data/ruby_ex/module/autoload_tree.rb +75 -0
- data/ruby_ex/module/hierarchy.rb +335 -0
- data/ruby_ex/module/instance_method_visibility.rb +73 -0
- data/ruby_ex/module_ex.rb +11 -0
- data/ruby_ex/node.rb +80 -0
- data/ruby_ex/object_monitor.rb +145 -0
- data/ruby_ex/object_monitor_activity.rb +33 -0
- data/ruby_ex/observable.rb +140 -0
- data/ruby_ex/observable_pool.rb +293 -0
- data/ruby_ex/orderedhash.rb +252 -0
- data/ruby_ex/pathname_ex.rb +152 -0
- data/ruby_ex/pp_hierarchy.rb +29 -0
- data/ruby_ex/pseudo_cache.rb +190 -0
- data/ruby_ex/queue.rb +56 -0
- data/ruby_ex/random_generators.rb +25 -0
- data/ruby_ex/random_generators/random_generator.rb +31 -0
- data/ruby_ex/random_generators/ruby.rb +23 -0
- data/ruby_ex/safe_eval.rb +348 -0
- data/ruby_ex/sendmail.rb +215 -0
- data/ruby_ex/service_manager.rb +121 -0
- data/ruby_ex/session/administrable.rb +120 -0
- data/ruby_ex/session/client.rb +153 -0
- data/ruby_ex/session/const.rb +18 -0
- data/ruby_ex/session/dispatcher.rb +184 -0
- data/ruby_ex/session/error.rb +21 -0
- data/ruby_ex/session/fetchable.rb +57 -0
- data/ruby_ex/session/fetcher.rb +62 -0
- data/ruby_ex/session/hookable.rb +26 -0
- data/ruby_ex/session/profile.rb +110 -0
- data/ruby_ex/session/server.rb +582 -0
- data/ruby_ex/session/test/administrable_test.rb +337 -0
- data/ruby_ex/session/test/basic_test.rb +523 -0
- data/ruby_ex/session/test/dispatcher_test.rb +409 -0
- data/ruby_ex/session/test/fetchable_test.rb +119 -0
- data/ruby_ex/session/test/sub_server_test.rb +188 -0
- data/ruby_ex/shuffle.rb +30 -0
- data/ruby_ex/spring.rb +136 -0
- data/ruby_ex/spring_set.rb +137 -0
- data/ruby_ex/string_ex.rb +28 -0
- data/ruby_ex/symtbl.rb +106 -0
- data/ruby_ex/synflow.rb +474 -0
- data/ruby_ex/test/unit/ui/yaml/testrunner.rb +164 -0
- data/ruby_ex/thread_mutex.rb +10 -0
- data/ruby_ex/timeout_ex.rb +81 -0
- data/ruby_ex/top_down.rb +73 -0
- data/ruby_ex/trace.rb +26 -0
- data/ruby_ex/uri/druby.rb +81 -0
- data/ruby_ex/uri/file.rb +65 -0
- data/ruby_ex/uri/ftp_ex.rb +37 -0
- data/ruby_ex/uri/http_ex.rb +43 -0
- data/ruby_ex/uri/ssh.rb +92 -0
- data/ruby_ex/uri/svn.rb +118 -0
- data/ruby_ex/uri_ex.rb +45 -0
- data/ruby_ex/verbose_object.rb +30 -0
- data/ruby_ex/version.rb +66 -0
- data/ruby_ex/yaml/basenode_ext.rb +63 -0
- data/ruby_ex/yaml/chop_header.rb +23 -0
- data/ruby_ex/yaml/transform.rb +449 -0
- data/ruby_ex/yaml/yregexpath.rb +76 -0
- data/src/changelog.rb +28 -18
- data/src/conflict.rb +20 -0
- data/src/diff.rb +18 -0
- data/src/diffstat.rb +9 -3
- data/src/last_changed_date.rb +18 -0
- data/src/mail.rb +33 -65
- data/src/message.rb +15 -9
- data/src/mycommit.rb +29 -14
- data/src/news.rb +24 -3
- data/src/status.rb +17 -0
- data/src/svn.rb +2 -2
- data/src/vcs.rb +24 -3
- metadata +124 -5
- 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,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
|
+
|
data/ruby_ex/top_down.rb
ADDED
|
@@ -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
|
data/ruby_ex/trace.rb
ADDED
|
@@ -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
|
data/ruby_ex/uri/file.rb
ADDED
|
@@ -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
|