ruby_ex 0.3.0 → 0.4.1.2
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/ChangeLog +324 -0
- data/NEWS +17 -0
- data/README +1 -1
- data/SPEC.yml +9 -9
- data/lib/abstract.rb +3 -38
- data/lib/abstract_node.rb +2 -4
- data/lib/algorithms/simulated_annealing.rb +26 -3
- data/lib/attributed_class.rb +2 -2
- data/lib/auto_object.rb +2 -6
- data/lib/blank_slate.rb +1 -1
- data/lib/cache.rb +4 -4
- data/lib/choose.rb +3 -5
- data/lib/commands/command.rb +53 -27
- data/lib/commands/datas/composite.rb +2 -4
- data/lib/commands/datas/data.rb +13 -16
- data/lib/commands/datas/factory.rb +2 -4
- data/lib/commands/datas/pipe.rb +52 -0
- data/lib/commands/datas/temp.rb +2 -2
- data/lib/commands/datas.rb +1 -6
- data/lib/commands/factory.rb +1 -3
- data/lib/commands/helpers.rb +6 -11
- data/lib/commands/pipe.rb +4 -6
- data/lib/commands/runners/exec.rb +2 -6
- data/lib/commands/runners/fork.rb +3 -20
- data/lib/commands/runners/mockable.rb +4 -7
- data/lib/commands/runners/no_run.rb +44 -0
- data/lib/commands/runners/popen.rb +49 -0
- data/lib/commands/runners/runner.rb +29 -6
- data/lib/commands/runners/system.rb +1 -4
- data/lib/commands/runners.rb +1 -6
- data/lib/commands/seq.rb +1 -3
- data/lib/commands.rb +3 -13
- data/lib/concrete.rb +38 -0
- data/lib/config_file.rb +2 -3
- data/lib/const_regexp.rb +1 -1
- data/lib/d_logger.rb +1 -1
- data/lib/daemon.rb +2 -3
- data/lib/diff.rb +1 -1
- data/lib/diff_tools.rb +1 -3
- data/lib/drb/drb_observable.rb +1 -1
- data/lib/drb/drb_observable_pool.rb +1 -1
- data/lib/drb/drb_service.rb +1 -1
- data/lib/drb/drb_undumped_attributes.rb +1 -1
- data/lib/drb/drb_undumped_indexed_object.rb +1 -1
- data/lib/drb/insecure_protected_methods.rb +1 -1
- data/lib/drb_ex.rb +1 -1
- data/lib/file_type.rb +2 -2
- data/lib/generate_id.rb +1 -1
- data/lib/genpasswd.rb +1 -1
- data/lib/hash_eval.rb +1 -1
- data/lib/histogram.rb +1 -1
- data/lib/hookable.rb +1 -4
- data/lib/hooker.rb +1 -1
- data/lib/html_encode.rb +1 -1
- data/lib/indexed_node.rb +0 -3
- data/lib/io_marshal.rb +1 -1
- data/lib/ioo.rb +1 -1
- data/lib/kill_all.rb +2 -2
- data/lib/labeled_node.rb +0 -3
- data/lib/logger_observer.rb +1 -1
- data/lib/md5sum.rb +1 -1
- data/lib/meta_factory.rb +1 -1
- data/lib/method_call.rb +1 -1
- data/lib/mocks/assertions.rb +1 -1
- data/lib/mocks/method_logger.rb +1 -3
- data/lib/mocks/mock.rb +2 -4
- data/lib/mocks/object.rb +1 -4
- data/lib/mocks/observer.rb +1 -3
- data/lib/mocks.rb +1 -6
- data/lib/module/autoload_tree.rb +1 -1
- data/lib/module/hierarchy.rb +1 -1
- data/lib/module/instance_method_visibility.rb +17 -16
- data/lib/object_monitor.rb +1 -1
- data/lib/object_monitor_activity.rb +1 -1
- data/lib/observable.rb +1 -1
- data/lib/observable_pool.rb +1 -1
- data/lib/ordered_hash.rb +1 -1
- data/lib/r_path.rb +44 -23
- data/lib/random_generators/random_generator.rb +1 -1
- data/lib/random_generators/ruby.rb +1 -5
- data/lib/random_generators.rb +20 -5
- data/lib/regex_list.rb +2 -5
- data/lib/regex_path.rb +64 -23
- data/lib/ruby_ex.rb +11 -2
- data/lib/safe_eval.rb +6 -15
- data/lib/sendmail.rb +41 -17
- data/lib/service_manager.rb +1 -1
- data/lib/shuffle.rb +3 -1
- data/lib/spring.rb +1 -1
- data/lib/spring_set.rb +1 -1
- data/lib/sym_tbl.rb +14 -8
- data/lib/sym_tbl_gsub.rb +88 -23
- data/lib/text.rb +1 -1
- data/lib/timeout_ex.rb +1 -1
- data/lib/trace.rb +1 -1
- data/lib/uri/druby.rb +3 -6
- data/lib/uri/file.rb +32 -18
- data/lib/uri/ftp_ex.rb +8 -3
- data/lib/uri/generic_ex.rb +158 -0
- data/lib/uri/http_ex.rb +9 -4
- data/lib/uri/mysql.rb +7 -15
- data/lib/uri/pgsql.rb +6 -14
- data/lib/uri/rsync.rb +77 -0
- data/lib/uri/ssh.rb +55 -27
- data/lib/uri/svn.rb +22 -76
- data/lib/verbose_object.rb +1 -5
- data/lib/yaml/transform.rb +1 -1
- data/lib/yaml/yregexpath.rb +1 -1
- data/test/algorithms/simulated_annealing_test.rb +79 -80
- data/test/unit-suite.yml +5 -3
- metadata +179 -172
- data/SPEC.dyn.yml +0 -10
- data/SPEC.gemspec +0 -14
- data/lib/uri_ex.rb +0 -110
- data/test/test-unit-setup.rb +0 -10
|
@@ -0,0 +1,158 @@
|
|
|
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
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/uri/generic_ex.rb 22203 2006-02-23T23:23:37.370101Z pouillar $
|
|
5
|
+
|
|
6
|
+
module URI
|
|
7
|
+
|
|
8
|
+
class CheckoutError < Exception
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class CommitError < Exception
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class SaveError < Exception
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
alias_method :static_parse, :parse
|
|
19
|
+
def parse ( anObject )
|
|
20
|
+
str = anObject.to_s
|
|
21
|
+
if str =~ /^(\w+):\/\//
|
|
22
|
+
"uri/#$1".camelize.constantize
|
|
23
|
+
end
|
|
24
|
+
static_parse(str)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Generic
|
|
29
|
+
have YamlExtension, :uri, :url
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# To make all uris command verbose you can change or modify the global
|
|
33
|
+
# command runner: URI::Generic.runner.make_verbose!
|
|
34
|
+
#
|
|
35
|
+
cattr_accessor :runner
|
|
36
|
+
|
|
37
|
+
self.runner = Commands::Runners::System.new.raise_on_failures
|
|
38
|
+
self.runner.command_data_factory.command_data_class = Commands::Datas::Temp
|
|
39
|
+
|
|
40
|
+
def pathname
|
|
41
|
+
Pathname.new(path)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def pathname= ( path )
|
|
45
|
+
self.path = path.to_s
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def to_yaml_string
|
|
49
|
+
to_s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def to_uri
|
|
53
|
+
self
|
|
54
|
+
end
|
|
55
|
+
alias_method :to_url, :to_uri
|
|
56
|
+
|
|
57
|
+
def checkout
|
|
58
|
+
raise CheckoutError, "Can't checkout a #{self.class}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def commit
|
|
62
|
+
raise CommitError, "Can't commit a #{self.class}"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def save
|
|
66
|
+
raise SaveError, "Can't save a #{self.class}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def add_query ( arg )
|
|
70
|
+
if query.nil?
|
|
71
|
+
self.query = arg
|
|
72
|
+
else
|
|
73
|
+
self.query += ',' + arg
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def mk_custom_opts
|
|
79
|
+
opts = []
|
|
80
|
+
return opts if @query.nil?
|
|
81
|
+
@query.split(/,/).map do |x|
|
|
82
|
+
k, v = x.split(/=/)
|
|
83
|
+
k = URI.decode(k)
|
|
84
|
+
if k.size == 1
|
|
85
|
+
opts << "-#{k}"
|
|
86
|
+
else
|
|
87
|
+
opts << "--#{k}"
|
|
88
|
+
end
|
|
89
|
+
opts << URI.decode(v) unless v.nil?
|
|
90
|
+
end
|
|
91
|
+
opts
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.yaml_load ( val )
|
|
95
|
+
URI.parse(val)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end # class Generic
|
|
99
|
+
|
|
100
|
+
class GenericEx < Generic
|
|
101
|
+
|
|
102
|
+
test_section __FILE__ do
|
|
103
|
+
class Test < Test::Unit::TestCase
|
|
104
|
+
|
|
105
|
+
def setup
|
|
106
|
+
assert_nothing_raised { @foo = URI.parse('http://foo/qux/bar') }
|
|
107
|
+
assert_nothing_raised do
|
|
108
|
+
@cmplx = URI.parse('http://foo@bar/qux/bob?a=b,c,d=e,f,ghi,jkl=mno')
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def teardown
|
|
113
|
+
URI::Generic.remove_subclasses
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_uri_inflections
|
|
117
|
+
assert_equal 'URI', 'uri'.camelize
|
|
118
|
+
assert_equal 'Security', 'security'.camelize
|
|
119
|
+
assert_equal 'Sec::URI::Ty', 'sec/uri/ty'.camelize
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_mk_custom_opts
|
|
123
|
+
assert_equal([], @foo.mk_custom_opts)
|
|
124
|
+
assert_equal(%w[-a b -c -d e -f --ghi --jkl mno], @cmplx.mk_custom_opts)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_lazy_loading_one
|
|
128
|
+
assert_nothing_raised do
|
|
129
|
+
assert_equal 'URI::DRuby', URI::DRuby.name
|
|
130
|
+
assert_equal URI::GenericEx, URI::DRuby.superclass
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_lazy_loading_one2
|
|
135
|
+
assert_equal 'File', ::File.name
|
|
136
|
+
assert_nothing_raised do
|
|
137
|
+
assert_equal 'URI::File', 'URI::File'.constantize.name
|
|
138
|
+
assert_equal URI::GenericEx, 'URI::File'.constantize.superclass
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_lazy_loading_full
|
|
143
|
+
PathList[__FILE__.to_path.dirname.parent + '(uri/**/*).rb'].each do |full, path|
|
|
144
|
+
assert_nothing_raised do
|
|
145
|
+
class_name = path.to_s.camelize.gsub(/Ex$/, '')
|
|
146
|
+
class_object = class_name.constantize
|
|
147
|
+
assert_equal class_name, class_object.name
|
|
148
|
+
assert_match(/URI::Generic(Ex)?/, class_object.superclass.name)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end # class Test
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end # class GenericEx
|
|
157
|
+
|
|
158
|
+
end # module URI
|
data/lib/uri/http_ex.rb
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
# Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
3
3
|
# License: Gnu General Public License.
|
|
4
4
|
|
|
5
|
-
# $LastChangedBy:
|
|
6
|
-
# $Id: http_ex.rb
|
|
5
|
+
# $LastChangedBy: pouillar $
|
|
6
|
+
# $Id: /w/fey/ruby_ex/trunk/lib/uri/http_ex.rb 22058 2006-02-20T21:41:08.060925Z pouillar $
|
|
7
7
|
|
|
8
|
-
require 'uri_ex'
|
|
9
8
|
require 'uri/http'
|
|
10
9
|
require 'net/http'
|
|
11
10
|
|
|
12
11
|
module URI
|
|
13
12
|
|
|
13
|
+
GenericEx.import!
|
|
14
14
|
class HTTP
|
|
15
15
|
|
|
16
16
|
def checkout
|
|
@@ -34,8 +34,13 @@ module URI
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
[tmp, nil]
|
|
37
|
-
|
|
37
|
+
end
|
|
38
38
|
|
|
39
39
|
end # class HTTP
|
|
40
40
|
|
|
41
|
+
class HttpEx
|
|
42
|
+
end
|
|
43
|
+
class HTTPEx
|
|
44
|
+
end
|
|
45
|
+
|
|
41
46
|
end # module URI
|
data/lib/uri/mysql.rb
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
|
2
2
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
3
3
|
# License:: Gnu General Public License.
|
|
4
|
-
# Revision:: $Id: mysql.rb
|
|
5
|
-
|
|
6
|
-
require 'uri_ex'
|
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/uri/mysql.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
|
7
5
|
|
|
8
6
|
module URI
|
|
9
7
|
|
|
10
|
-
class MySQL <
|
|
8
|
+
class MySQL < GenericEx
|
|
11
9
|
|
|
12
10
|
SCHEME = 'mysql'.freeze
|
|
13
11
|
DEFAULT_HOST = 'localhost'.freeze
|
|
14
12
|
DEFAULT_PORT = 3306
|
|
15
13
|
DEFAULT_QUERY = ''.freeze
|
|
16
|
-
|
|
14
|
+
cattr_reader :mysqldump
|
|
15
|
+
@@mysqldump = 'mysqldump'.to_cmd.freeze
|
|
17
16
|
|
|
18
17
|
COMPONENT = [
|
|
19
18
|
:scheme,
|
|
@@ -24,12 +23,6 @@ module URI
|
|
|
24
23
|
].freeze
|
|
25
24
|
|
|
26
25
|
|
|
27
|
-
def self.build ( args )
|
|
28
|
-
tmp = Util::make_components_hash(self, args)
|
|
29
|
-
return super(tmp)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
|
|
33
26
|
def mk_connection_opts
|
|
34
27
|
opts = []
|
|
35
28
|
opts << '-h' << @host
|
|
@@ -59,9 +52,8 @@ module URI
|
|
|
59
52
|
|
|
60
53
|
def save
|
|
61
54
|
out = TempPath.new('dump', pathname.basename.to_s)
|
|
62
|
-
cmd =
|
|
63
|
-
cmd.run(
|
|
64
|
-
out
|
|
55
|
+
cmd = mysqldump + mk_connection_opts + mk_dump_opts(out) + mk_custom_opts
|
|
56
|
+
[out, cmd.run(runner)]
|
|
65
57
|
end
|
|
66
58
|
|
|
67
59
|
end # class MySQL
|
|
@@ -102,7 +94,7 @@ module URI
|
|
|
102
94
|
assert_equal(["-h", "bar", "-u", "foo"], @cmplx.mk_connection_opts)
|
|
103
95
|
end
|
|
104
96
|
|
|
105
|
-
|
|
97
|
+
|
|
106
98
|
def test_mk_dump_opts
|
|
107
99
|
base = %w[-C -r out]
|
|
108
100
|
assert_equal(%w[ -C bar ], @foo.mk_dump_opts())
|
data/lib/uri/pgsql.rb
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
|
2
2
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
3
3
|
# License:: Gnu General Public License.
|
|
4
|
-
# Revision:: $Id: pgsql.rb
|
|
5
|
-
|
|
6
|
-
require 'uri_ex'
|
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/uri/pgsql.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
|
7
5
|
|
|
8
6
|
module URI
|
|
9
7
|
|
|
10
|
-
class PgSQL <
|
|
8
|
+
class PgSQL < GenericEx
|
|
11
9
|
|
|
12
10
|
SCHEME = 'pgsql'.freeze
|
|
13
11
|
DEFAULT_HOST = 'localhost'.freeze
|
|
14
12
|
DEFAULT_PORT = 5432
|
|
15
13
|
DEFAULT_QUERY = ''.freeze
|
|
16
|
-
|
|
14
|
+
cattr_reader :pg_dump
|
|
15
|
+
@@pg_dump = 'pg_dump'.to_cmd.freeze
|
|
17
16
|
|
|
18
17
|
COMPONENT = [
|
|
19
18
|
:scheme,
|
|
@@ -24,12 +23,6 @@ module URI
|
|
|
24
23
|
].freeze
|
|
25
24
|
|
|
26
25
|
|
|
27
|
-
def self.build ( args )
|
|
28
|
-
tmp = Util::make_components_hash(self, args)
|
|
29
|
-
return super(tmp)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
|
|
33
26
|
def mk_connection_opts
|
|
34
27
|
opts = []
|
|
35
28
|
opts << '-h' << @host
|
|
@@ -58,9 +51,8 @@ module URI
|
|
|
58
51
|
|
|
59
52
|
def save
|
|
60
53
|
out = TempPath.new('dump', pathname.basename.to_s)
|
|
61
|
-
cmd =
|
|
62
|
-
cmd.run(
|
|
63
|
-
out
|
|
54
|
+
cmd = pg_dump + mk_connection_opts + mk_dump_opts(out) + mk_custom_opts
|
|
55
|
+
[out, cmd.run(runner)]
|
|
64
56
|
end
|
|
65
57
|
|
|
66
58
|
end # class PgSQL
|
data/lib/uri/rsync.rb
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/uri/rsync.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
|
5
|
+
|
|
6
|
+
module URI
|
|
7
|
+
|
|
8
|
+
class Rsync < GenericEx
|
|
9
|
+
|
|
10
|
+
SCHEMES = ['rsync.ssh'.freeze]
|
|
11
|
+
DEFAULT_HOST = 'localhost'.freeze
|
|
12
|
+
DEFAULT_QUERY = ''.freeze
|
|
13
|
+
cattr_reader :rsync
|
|
14
|
+
@@rsync ||= 'rsync'.to_cmd.freeze
|
|
15
|
+
|
|
16
|
+
COMPONENT = [
|
|
17
|
+
:scheme,
|
|
18
|
+
:userinfo,
|
|
19
|
+
:host,
|
|
20
|
+
:path,
|
|
21
|
+
:query
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
def mk_opts
|
|
25
|
+
['-va'] + mk_custom_opts
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def mk_arg
|
|
29
|
+
"#@user@#@host:#{@path.gsub(/^\//, '')}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# def checkout
|
|
33
|
+
# out = TempPath.new('checkout', pathname.basename.to_s)
|
|
34
|
+
# [out, SCP[mk_opts, mk_arg, out].run(self.runner)]
|
|
35
|
+
# end
|
|
36
|
+
|
|
37
|
+
# def save
|
|
38
|
+
# checkout.first.save
|
|
39
|
+
# end
|
|
40
|
+
|
|
41
|
+
def commit ( aPath )
|
|
42
|
+
rsync[mk_opts, aPath, mk_arg].run(runner)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end # class Rsync
|
|
46
|
+
|
|
47
|
+
Rsync::SCHEMES.each do |scheme|
|
|
48
|
+
@@schemes[scheme.upcase] = Rsync
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test_section __FILE__ do
|
|
52
|
+
|
|
53
|
+
class RsyncTest < Test::Unit::TestCase
|
|
54
|
+
|
|
55
|
+
def test_mk_opts
|
|
56
|
+
assert_nothing_raised { @uri = URI.parse('rsync.ssh://foo@bar') }
|
|
57
|
+
assert_equal(['-va'], @uri.mk_opts)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_mk_opts_with_query
|
|
61
|
+
assert_nothing_raised do
|
|
62
|
+
@uri = URI.parse('rsync.ssh://foo@bar/baz?rsh=ssh%20-i%20foo,boo,bee=42')
|
|
63
|
+
end
|
|
64
|
+
ref = ['-va', '--rsh', 'ssh -i foo', '--boo', '--bee', '42']
|
|
65
|
+
assert_equal(ref, @uri.mk_opts)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_mk_arg
|
|
69
|
+
assert_nothing_raised { @uri = URI.parse('rsync.ssh://foo@bar/path') }
|
|
70
|
+
assert_equal('foo@bar:path', @uri.mk_arg)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end # class RsyncTest
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end # module URI
|
data/lib/uri/ssh.rb
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
# License:: Gnu General Public License.
|
|
4
4
|
# Revision:: $Id$
|
|
5
5
|
|
|
6
|
-
require 'uri_ex'
|
|
7
|
-
|
|
8
6
|
module URI
|
|
9
7
|
|
|
10
|
-
class Ssh <
|
|
8
|
+
class Ssh < GenericEx
|
|
11
9
|
|
|
12
10
|
SCHEME = 'ssh'.freeze
|
|
13
11
|
DEFAULT_HOST = 'localhost'.freeze
|
|
14
12
|
DEFAULT_PORT = 22
|
|
15
13
|
DEFAULT_QUERY = ''.freeze
|
|
16
|
-
|
|
14
|
+
cattr_reader :ssh, :scp
|
|
15
|
+
@@ssh = 'ssh'.to_cmd.freeze
|
|
16
|
+
@@scp = 'scp'.to_cmd.freeze
|
|
17
17
|
|
|
18
18
|
COMPONENT = [
|
|
19
19
|
:scheme,
|
|
@@ -23,44 +23,72 @@ module URI
|
|
|
23
23
|
:query
|
|
24
24
|
].freeze
|
|
25
25
|
|
|
26
|
-
def self.build ( args )
|
|
27
|
-
tmp = Util::make_components_hash(self, args)
|
|
28
|
-
return super(tmp)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
26
|
def mk_opts
|
|
32
|
-
opts = []
|
|
33
|
-
opts << '-q'
|
|
27
|
+
opts = ['-q']
|
|
34
28
|
opts << '-P' << @port if @port != DEFAULT_PORT
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
else
|
|
41
|
-
opts << "--#{k}"
|
|
42
|
-
end
|
|
43
|
-
opts << v unless v.nil?
|
|
44
|
-
end
|
|
45
|
-
opts
|
|
29
|
+
opts + mk_custom_opts
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def mk_scp_arg
|
|
33
|
+
"#{mk_ssh_arg}:#{@path.gsub(/^\//, '')}"
|
|
46
34
|
end
|
|
47
35
|
|
|
48
|
-
def
|
|
49
|
-
|
|
36
|
+
def mk_ssh_arg
|
|
37
|
+
result = ''
|
|
38
|
+
result << @user << '@' if @user
|
|
39
|
+
result + @host
|
|
50
40
|
end
|
|
51
41
|
|
|
52
42
|
def checkout
|
|
53
43
|
out = TempPath.new('checkout', pathname.basename.to_s)
|
|
54
|
-
[out,
|
|
44
|
+
[out, scp[mk_opts, mk_scp_arg, out].run(runner)]
|
|
55
45
|
end
|
|
56
46
|
|
|
57
47
|
def save
|
|
58
|
-
checkout.save
|
|
48
|
+
checkout.first.save
|
|
59
49
|
end
|
|
60
50
|
|
|
61
51
|
def commit ( aPath )
|
|
62
|
-
|
|
52
|
+
scp[mk_opts, aPath, mk_scp_arg].run(runner)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def jump_and_eval ( aString, ruby='ruby', ruby_opts=[], &block )
|
|
56
|
+
tag = "=== RESULT ===\n"
|
|
57
|
+
TempPath.new do |tmp|
|
|
58
|
+
tmp.open('w') do |f|
|
|
59
|
+
f.print "
|
|
60
|
+
aProc = proc { #{aString} }
|
|
61
|
+
result =
|
|
62
|
+
begin
|
|
63
|
+
[true, aProc[]]
|
|
64
|
+
rescue Exception => ex
|
|
65
|
+
[false, ex]
|
|
66
|
+
end
|
|
67
|
+
STDERR.print '#{tag}'
|
|
68
|
+
STDERR.print Marshal.dump(result)
|
|
69
|
+
"
|
|
70
|
+
end
|
|
71
|
+
cmd = ssh[mk_opts, mk_ssh_arg, ruby, *ruby_opts] < tmp
|
|
72
|
+
data = cmd.popen
|
|
73
|
+
block[data.output]
|
|
74
|
+
data.waitpid
|
|
75
|
+
if data.status.success?
|
|
76
|
+
err = data.error.read
|
|
77
|
+
err, result = err.split(tag)
|
|
78
|
+
STDERR.print err
|
|
79
|
+
st, obj = Marshal.load(result)
|
|
80
|
+
if st
|
|
81
|
+
return obj
|
|
82
|
+
else
|
|
83
|
+
raise obj
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
data.display
|
|
87
|
+
raise "Command failed #{cmd}"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
63
90
|
end
|
|
91
|
+
alias_method :remote_eval, :jump_and_eval
|
|
64
92
|
|
|
65
93
|
end # class Ssh
|
|
66
94
|
|
data/lib/uri/svn.rb
CHANGED
|
@@ -2,37 +2,42 @@
|
|
|
2
2
|
# Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
3
3
|
# License: Gnu General Public License.
|
|
4
4
|
|
|
5
|
-
# $LastChangedBy:
|
|
6
|
-
# $Id: svn.rb
|
|
7
|
-
|
|
8
|
-
require 'uri_ex'
|
|
5
|
+
# $LastChangedBy: pouillar $
|
|
6
|
+
# $Id: /w/fey/ruby_ex/trunk/lib/uri/svn.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
|
9
7
|
|
|
10
8
|
module URI
|
|
11
9
|
|
|
12
|
-
class Svn <
|
|
10
|
+
class Svn < GenericEx
|
|
13
11
|
|
|
14
12
|
COMPONENT = [
|
|
15
13
|
:scheme,
|
|
16
14
|
:host,
|
|
17
15
|
:path
|
|
18
16
|
].freeze
|
|
19
|
-
SVN = 'svn'.to_cmd.freeze
|
|
20
|
-
SVNADMIN = 'svnadmin'.to_cmd.freeze
|
|
21
17
|
|
|
18
|
+
cattr_reader :svn, :svnadmin
|
|
19
|
+
|
|
20
|
+
@@svn = 'svn'.to_cmd.freeze
|
|
21
|
+
@@svnadmin = 'svnadmin'.to_cmd.freeze
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def svn_uri_string
|
|
25
|
+
to_s.sub(/^svn\./, '')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def to_s
|
|
29
|
+
super.sub(/^(svn\.file:\/)([^\/])/, '\1//\2')
|
|
30
|
+
end
|
|
22
31
|
|
|
23
|
-
def
|
|
24
|
-
|
|
25
|
-
return super(tmp)
|
|
32
|
+
def fingerprint
|
|
33
|
+
svn['info', svn_uri_string].system(:r).output.read[/Revision: (\d+)/, 1]
|
|
26
34
|
end
|
|
27
35
|
|
|
28
36
|
def checkout
|
|
29
|
-
# klass = SvnSchemes.guess(scheme)
|
|
30
|
-
# klass.new
|
|
31
37
|
tmp = TempPath.new('svn-checkout')
|
|
32
38
|
tmp.mkpath
|
|
33
|
-
target = to_s.sub(/^svn\./, '')
|
|
34
39
|
tmp += pathname.basename
|
|
35
|
-
[tmp,
|
|
40
|
+
[tmp, svn['checkout', svn_uri_string, tmp].run(runner)]
|
|
36
41
|
end
|
|
37
42
|
|
|
38
43
|
def save
|
|
@@ -40,72 +45,13 @@ module URI
|
|
|
40
45
|
repos = pathname
|
|
41
46
|
raise SaveError unless (repos + 'format').exist?
|
|
42
47
|
out = TempPath.new('save', "#{repos.basename}.svndump")
|
|
43
|
-
cmd =
|
|
44
|
-
cmd.run(
|
|
48
|
+
cmd = svnadmin['dump', repos, '--incremental', '--quiet', '--deltas'] > out
|
|
49
|
+
[out, cmd.run(runner)]
|
|
45
50
|
end
|
|
46
51
|
|
|
47
52
|
end # class Svn
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def self.guess ( aScheme )
|
|
52
|
-
init
|
|
53
|
-
@@svn_schemes[aScheme]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def self.init
|
|
57
|
-
return if defined? @@svn_schemes
|
|
58
|
-
@@svn_schemes = {}
|
|
59
|
-
constants.each do |const|
|
|
60
|
-
klass = const_get(const)
|
|
61
|
-
next if klass.abstract?
|
|
62
|
-
@@svn_schemes[klass.scheme] = klass
|
|
63
|
-
end
|
|
64
|
-
@@svn_schemes.freeze
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def self.svn_schemes
|
|
68
|
-
init
|
|
69
|
-
@@svn_schemes
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
class AbstractSvnScheme
|
|
73
|
-
include Abstract
|
|
74
|
-
|
|
75
|
-
def self.scheme
|
|
76
|
-
const_get(:SCHEME)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
class SvnScheme < AbstractSvnScheme
|
|
82
|
-
include Concrete
|
|
83
|
-
SCHEME = 'SVN'
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
class SvnSshScheme < AbstractSvnScheme
|
|
87
|
-
include Concrete
|
|
88
|
-
SCHEME = 'SVN+SSH'
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
class SvnHttpScheme < AbstractSvnScheme
|
|
92
|
-
include Concrete
|
|
93
|
-
SCHEME = 'SVN.HTTP'
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
class SvnHttpsScheme < AbstractSvnScheme
|
|
97
|
-
include Concrete
|
|
98
|
-
SCHEME = 'SVN.HTTPS'
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
class SvnFileScheme < AbstractSvnScheme
|
|
102
|
-
include Concrete
|
|
103
|
-
SCHEME = 'SVN.FILE'
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
SvnSchemes.svn_schemes.each_key do |name|
|
|
54
|
+
['SVN', 'SVN+SSH', 'SVN.HTTP', 'SVN.HTTPS', 'SVN.FILE'].each do |name|
|
|
109
55
|
@@schemes[name] = Svn
|
|
110
56
|
end
|
|
111
57
|
|
data/lib/verbose_object.rb
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
|
3
3
|
# License:: GNU General Public License (GPL).
|
|
4
|
-
# Revision:: $Id: verbose_object.rb
|
|
5
|
-
|
|
6
|
-
require 'blank_slate'
|
|
7
|
-
require 'method_call'
|
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/verbose_object.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
|
8
5
|
|
|
9
6
|
module Verbosify
|
|
10
7
|
|
|
@@ -136,7 +133,6 @@ class Object
|
|
|
136
133
|
end # class Object
|
|
137
134
|
|
|
138
135
|
test_section __FILE__ do
|
|
139
|
-
require 'mocks'
|
|
140
136
|
|
|
141
137
|
class TestVerboseObject < ::Test::Unit::TestCase
|
|
142
138
|
include Mocks::Assertions
|
data/lib/yaml/transform.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# License:: Gnu General Public License.
|
|
4
4
|
|
|
5
5
|
# $LastChangedBy: ertai $
|
|
6
|
-
# $Id: transform.rb
|
|
6
|
+
# $Id: /w/fey/ruby_ex/trunk/lib/yaml/transform.rb 7944 2005-09-06T23:27:27.929371Z ertai $
|
|
7
7
|
|
|
8
8
|
# TODO: Raised exception must be completed with a descritpion
|
|
9
9
|
# TODO: Fix bug on Array see test_higher_level_on_array
|