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.
Files changed (115) hide show
  1. data/ChangeLog +324 -0
  2. data/NEWS +17 -0
  3. data/README +1 -1
  4. data/SPEC.yml +9 -9
  5. data/lib/abstract.rb +3 -38
  6. data/lib/abstract_node.rb +2 -4
  7. data/lib/algorithms/simulated_annealing.rb +26 -3
  8. data/lib/attributed_class.rb +2 -2
  9. data/lib/auto_object.rb +2 -6
  10. data/lib/blank_slate.rb +1 -1
  11. data/lib/cache.rb +4 -4
  12. data/lib/choose.rb +3 -5
  13. data/lib/commands/command.rb +53 -27
  14. data/lib/commands/datas/composite.rb +2 -4
  15. data/lib/commands/datas/data.rb +13 -16
  16. data/lib/commands/datas/factory.rb +2 -4
  17. data/lib/commands/datas/pipe.rb +52 -0
  18. data/lib/commands/datas/temp.rb +2 -2
  19. data/lib/commands/datas.rb +1 -6
  20. data/lib/commands/factory.rb +1 -3
  21. data/lib/commands/helpers.rb +6 -11
  22. data/lib/commands/pipe.rb +4 -6
  23. data/lib/commands/runners/exec.rb +2 -6
  24. data/lib/commands/runners/fork.rb +3 -20
  25. data/lib/commands/runners/mockable.rb +4 -7
  26. data/lib/commands/runners/no_run.rb +44 -0
  27. data/lib/commands/runners/popen.rb +49 -0
  28. data/lib/commands/runners/runner.rb +29 -6
  29. data/lib/commands/runners/system.rb +1 -4
  30. data/lib/commands/runners.rb +1 -6
  31. data/lib/commands/seq.rb +1 -3
  32. data/lib/commands.rb +3 -13
  33. data/lib/concrete.rb +38 -0
  34. data/lib/config_file.rb +2 -3
  35. data/lib/const_regexp.rb +1 -1
  36. data/lib/d_logger.rb +1 -1
  37. data/lib/daemon.rb +2 -3
  38. data/lib/diff.rb +1 -1
  39. data/lib/diff_tools.rb +1 -3
  40. data/lib/drb/drb_observable.rb +1 -1
  41. data/lib/drb/drb_observable_pool.rb +1 -1
  42. data/lib/drb/drb_service.rb +1 -1
  43. data/lib/drb/drb_undumped_attributes.rb +1 -1
  44. data/lib/drb/drb_undumped_indexed_object.rb +1 -1
  45. data/lib/drb/insecure_protected_methods.rb +1 -1
  46. data/lib/drb_ex.rb +1 -1
  47. data/lib/file_type.rb +2 -2
  48. data/lib/generate_id.rb +1 -1
  49. data/lib/genpasswd.rb +1 -1
  50. data/lib/hash_eval.rb +1 -1
  51. data/lib/histogram.rb +1 -1
  52. data/lib/hookable.rb +1 -4
  53. data/lib/hooker.rb +1 -1
  54. data/lib/html_encode.rb +1 -1
  55. data/lib/indexed_node.rb +0 -3
  56. data/lib/io_marshal.rb +1 -1
  57. data/lib/ioo.rb +1 -1
  58. data/lib/kill_all.rb +2 -2
  59. data/lib/labeled_node.rb +0 -3
  60. data/lib/logger_observer.rb +1 -1
  61. data/lib/md5sum.rb +1 -1
  62. data/lib/meta_factory.rb +1 -1
  63. data/lib/method_call.rb +1 -1
  64. data/lib/mocks/assertions.rb +1 -1
  65. data/lib/mocks/method_logger.rb +1 -3
  66. data/lib/mocks/mock.rb +2 -4
  67. data/lib/mocks/object.rb +1 -4
  68. data/lib/mocks/observer.rb +1 -3
  69. data/lib/mocks.rb +1 -6
  70. data/lib/module/autoload_tree.rb +1 -1
  71. data/lib/module/hierarchy.rb +1 -1
  72. data/lib/module/instance_method_visibility.rb +17 -16
  73. data/lib/object_monitor.rb +1 -1
  74. data/lib/object_monitor_activity.rb +1 -1
  75. data/lib/observable.rb +1 -1
  76. data/lib/observable_pool.rb +1 -1
  77. data/lib/ordered_hash.rb +1 -1
  78. data/lib/r_path.rb +44 -23
  79. data/lib/random_generators/random_generator.rb +1 -1
  80. data/lib/random_generators/ruby.rb +1 -5
  81. data/lib/random_generators.rb +20 -5
  82. data/lib/regex_list.rb +2 -5
  83. data/lib/regex_path.rb +64 -23
  84. data/lib/ruby_ex.rb +11 -2
  85. data/lib/safe_eval.rb +6 -15
  86. data/lib/sendmail.rb +41 -17
  87. data/lib/service_manager.rb +1 -1
  88. data/lib/shuffle.rb +3 -1
  89. data/lib/spring.rb +1 -1
  90. data/lib/spring_set.rb +1 -1
  91. data/lib/sym_tbl.rb +14 -8
  92. data/lib/sym_tbl_gsub.rb +88 -23
  93. data/lib/text.rb +1 -1
  94. data/lib/timeout_ex.rb +1 -1
  95. data/lib/trace.rb +1 -1
  96. data/lib/uri/druby.rb +3 -6
  97. data/lib/uri/file.rb +32 -18
  98. data/lib/uri/ftp_ex.rb +8 -3
  99. data/lib/uri/generic_ex.rb +158 -0
  100. data/lib/uri/http_ex.rb +9 -4
  101. data/lib/uri/mysql.rb +7 -15
  102. data/lib/uri/pgsql.rb +6 -14
  103. data/lib/uri/rsync.rb +77 -0
  104. data/lib/uri/ssh.rb +55 -27
  105. data/lib/uri/svn.rb +22 -76
  106. data/lib/verbose_object.rb +1 -5
  107. data/lib/yaml/transform.rb +1 -1
  108. data/lib/yaml/yregexpath.rb +1 -1
  109. data/test/algorithms/simulated_annealing_test.rb +79 -80
  110. data/test/unit-suite.yml +5 -3
  111. metadata +179 -172
  112. data/SPEC.dyn.yml +0 -10
  113. data/SPEC.gemspec +0 -14
  114. data/lib/uri_ex.rb +0 -110
  115. 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: ertai $
6
- # $Id: http_ex.rb 385 2005-10-02 17:05:35Z ertai $
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
- end
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 310 2005-06-27 07:14:36Z ertai $
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 < Generic
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
- DUMP = 'mysqldump'.to_cmd.freeze
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 = DUMP + mk_connection_opts + mk_dump_opts(out) + mk_custom_opts
63
- cmd.run(self.runner)
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 310 2005-06-27 07:14:36Z ertai $
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 < Generic
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
- DUMP = 'pg_dump'.to_cmd.freeze
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 = DUMP + mk_connection_opts + mk_dump_opts(out) + mk_custom_opts
62
- cmd.run(self.runner)
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 < Generic
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
- SCP = 'scp'.to_cmd.freeze
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
- return opts if @query.nil?
36
- @query.split(/,/).map do |x|
37
- k, v = x.split(/=/)
38
- if k.size == 1
39
- opts << "-#{k}"
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 mk_arg
49
- "#@user@#@host:#{@path.gsub(/^\//, '')}"
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, SCP[mk_opts, mk_arg, out].run(self.runner)]
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
- SCP[mk_opts, aPath, mk_arg].run(self.runner)
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: ertai $
6
- # $Id: svn.rb 363 2005-09-24 17:15:50Z ertai $
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 < Generic
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 self.build ( args )
24
- tmp = Util::make_components_hash(self, args)
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, SVN['checkout', target, tmp].run(self.runner)]
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 = SVNADMIN['dump', repos, '--incremental', '--quiet'] > out
44
- cmd.run(self.runner)
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
- module SvnSchemes
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
 
@@ -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 339 2005-09-06 23:27:27Z ertai $
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
@@ -3,7 +3,7 @@
3
3
  # License:: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: transform.rb 339 2005-09-06 23:27:27Z ertai $
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
@@ -3,7 +3,7 @@
3
3
  # License:: Ruby license.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: yregexpath.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/yaml/yregexpath.rb 7944 2005-09-06T23:27:27.929371Z ertai $
7
7
 
8
8
 
9
9
  module YAML