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,37 @@
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: polrop $
6
+ # $Id: ftp_ex.rb 159 2005-02-18 12:07:23Z polrop $
7
+
8
+ require 'uri_ex'
9
+ require 'uri/ftp'
10
+ require 'net/ftp'
11
+ require 'mktemp'
12
+
13
+ module URI
14
+
15
+ class FTP
16
+
17
+ def checkout
18
+ tmp = TempPath.new('checkout', pathname.basename.to_s)
19
+
20
+ begin
21
+ Net::FTP.open(host) do |ftp|
22
+ ftp.login
23
+ ftp.passive = true
24
+ ftp.getbinaryfile(path, tmp)
25
+ end
26
+
27
+ rescue Exception => ex
28
+ tmp.unlink if tmp.exist?
29
+ raise CheckoutError, "Cannot checkout #{to_s} (error: #{ex.short_pp})"
30
+ end
31
+
32
+ tmp
33
+ end
34
+
35
+ end # class FTP
36
+
37
+ end # module URI
@@ -0,0 +1,43 @@
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: polrop $
6
+ # $Id: http_ex.rb 159 2005-02-18 12:07:23Z polrop $
7
+
8
+ require 'exception'
9
+ require 'uri_ex'
10
+ require 'uri/http'
11
+ require 'net/http'
12
+ require 'mktemp'
13
+
14
+ module URI
15
+
16
+ class HTTP
17
+
18
+ def checkout
19
+ tmp = TempPath.new('checkout', pathname.basename.to_s)
20
+
21
+ begin
22
+ uri = URI.parse(ENV['http_proxy'] || '')
23
+ proxy_auth = [uri.host, uri.port, uri.user, uri.password]
24
+
25
+ Net::HTTP::Proxy(*proxy_auth).start(host) do |http|
26
+ tmp.open('w') do |out|
27
+ http.get(path) do |str|
28
+ out.print str
29
+ end
30
+ end
31
+ end
32
+
33
+ rescue Exception => ex
34
+ tmp.unlink if tmp.exist?
35
+ raise CheckoutError, "Cannot checkout #{to_s} (error: #{ex.short_pp})"
36
+ end
37
+
38
+ tmp
39
+ end
40
+
41
+ end # class HTTP
42
+
43
+ end # module URI
@@ -0,0 +1,92 @@
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$
5
+
6
+ require 'uri_ex'
7
+
8
+ module URI
9
+
10
+ class Ssh < Generic
11
+
12
+ SCHEME = 'ssh'.freeze
13
+ DEFAULT_HOST = 'localhost'.freeze
14
+ DEFAULT_PORT = 22
15
+ DEFAULT_QUERY = ''.freeze
16
+
17
+ COMPONENT = [
18
+ :scheme,
19
+ :userinfo,
20
+ :host,
21
+ :path,
22
+ :query
23
+ ].freeze
24
+
25
+ def self.build ( args )
26
+ tmp = Util::make_components_hash(self, args)
27
+ return super(tmp)
28
+ end
29
+
30
+ def get_opts
31
+ opts = []
32
+ opts << '-q' << '-P' << @port
33
+ return opts if @query.nil?
34
+ @query.split(/,/).map do |x|
35
+ k, v = x.split(/=/)
36
+ if k.size == 1
37
+ opts << "-#{k}"
38
+ else
39
+ opts << "--#{k}"
40
+ end
41
+ opts << v unless v.nil?
42
+ end
43
+ opts
44
+ end
45
+
46
+ def mk_opts
47
+ get_opts.join(' ')
48
+ end
49
+
50
+ def mk_arg
51
+ "#@user@#@host:#{@path.gsub(/^\//, '')}"
52
+ end
53
+
54
+ def checkout
55
+ out = TempPath.new('checkout', pathname.basename.to_s)
56
+ cmd = "scp #{mk_opts} #{mk_arg} #{out}"
57
+ puts cmd
58
+ raise CheckoutError, to_s unless system cmd
59
+ out
60
+ end
61
+
62
+ def save
63
+ checkout.save
64
+ end
65
+
66
+ def commit ( aPath )
67
+ cmd = "scp #{mk_opts} #{aPath} #{mk_arg}"
68
+ puts cmd
69
+ raise CommitError, to_s unless system cmd
70
+ end
71
+
72
+ end # class Ssh
73
+
74
+ @@schemes[Ssh::SCHEME.upcase] = Ssh
75
+
76
+ if $0 == __FILE__
77
+ require 'test/unit'
78
+ class SshTest < Test::Unit::TestCase
79
+ def test_basic
80
+ assert_nothing_raised { @uri = URI.parse('ssh://foo@bar') }
81
+ assert_equal('-q -P 22', @uri.mk_opts)
82
+ end
83
+ def test_with_query
84
+ assert_nothing_raised do
85
+ @uri = URI.parse('ssh://foo@bar/qux?a=b,c,d=e,f,ghi,jkl=mno')
86
+ end
87
+ assert_equal('-q -P 22 -a b -c -d e -f --ghi --jkl mno', @uri.mk_opts)
88
+ end
89
+ end # class SshTest
90
+ end
91
+
92
+ end # module URI
@@ -0,0 +1,118 @@
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: svn.rb 201 2005-04-23 00:31:12Z ertai $
7
+
8
+ require 'uri_ex'
9
+ require 'abstract'
10
+
11
+ module URI
12
+
13
+ class Svn < Generic
14
+
15
+ COMPONENT = [
16
+ :scheme,
17
+ :host,
18
+ :path
19
+ ].freeze
20
+
21
+ def self.build ( args )
22
+ tmp = Util::make_components_hash(self, args)
23
+ return super(tmp)
24
+ end
25
+
26
+ def checkout
27
+ # klass = SvnSchemes.guess(scheme)
28
+ # klass.new
29
+ tmp = TempPath.new('svn-checkout')
30
+ out = TempPath.new('svn-checkout-out')
31
+ err = TempPath.new('svn-checkout-err')
32
+ tmp.mkpath
33
+ target = to_s.sub(/^svn\./, '')
34
+ tmp += pathname.basename
35
+ unless system "svn checkout #{target} #{tmp} > #{out} 2> #{err}"
36
+ raise CheckoutError, to_s
37
+ end
38
+ [tmp, out, err]
39
+ end
40
+
41
+ def save
42
+ raise SaveError unless scheme.downcase == 'svn.file'
43
+ repos = pathname
44
+ raise SaveError unless (repos + 'format').exist?
45
+ out = TempPath.new('save', "#{repos.basename}.svndump")
46
+ cmd = "svnadmin dump #{repos} --incremental --quiet > #{out}"
47
+ unless system cmd
48
+ raise SaveError, "command failed: `#{cmd}' => #{$?}"
49
+ end
50
+ out
51
+ end
52
+
53
+ end # class Svn
54
+
55
+ module SvnSchemes
56
+
57
+ def self.guess ( aScheme )
58
+ init
59
+ @@svn_schemes[aScheme]
60
+ end
61
+
62
+ def self.init
63
+ return if defined? @@svn_schemes
64
+ @@svn_schemes = {}
65
+ constants.each do |const|
66
+ klass = const_get(const)
67
+ next if klass.abstract?
68
+ @@svn_schemes[klass.scheme] = klass
69
+ end
70
+ @@svn_schemes.freeze
71
+ end
72
+
73
+ def self.svn_schemes
74
+ init
75
+ @@svn_schemes
76
+ end
77
+
78
+ class AbstractSvnScheme
79
+ include Abstract
80
+
81
+ def self.scheme
82
+ const_get(:SCHEME)
83
+ end
84
+
85
+ end
86
+
87
+ class SvnScheme < AbstractSvnScheme
88
+ include Concrete
89
+ SCHEME = 'SVN'
90
+ end
91
+
92
+ class SvnSshScheme < AbstractSvnScheme
93
+ include Concrete
94
+ SCHEME = 'SVN+SSH'
95
+ end
96
+
97
+ class SvnHttpScheme < AbstractSvnScheme
98
+ include Concrete
99
+ SCHEME = 'SVN.HTTP'
100
+ end
101
+
102
+ class SvnHttpsScheme < AbstractSvnScheme
103
+ include Concrete
104
+ SCHEME = 'SVN.HTTPS'
105
+ end
106
+
107
+ class SvnFileScheme < AbstractSvnScheme
108
+ include Concrete
109
+ SCHEME = 'SVN.FILE'
110
+ end
111
+
112
+ end
113
+
114
+ SvnSchemes.svn_schemes.each_key do |name|
115
+ @@schemes[name] = Svn
116
+ end
117
+
118
+ end # module URI
@@ -0,0 +1,45 @@
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: uri_ex.rb 201 2005-04-23 00:31:12Z ertai $
7
+
8
+ require 'uri'
9
+
10
+ module URI
11
+
12
+ class CheckoutError < Exception
13
+ end
14
+
15
+ class CommitError < Exception
16
+ end
17
+
18
+ class SaveError < Exception
19
+ end
20
+
21
+ class Generic
22
+
23
+ def pathname
24
+ Pathname.new(path)
25
+ end
26
+
27
+ def to_yaml_type
28
+ '!uri'
29
+ end
30
+
31
+ def to_yaml ( opts={} )
32
+ "!uri #{to_s}"
33
+ end
34
+
35
+ def checkout
36
+ raise CheckoutError, "Can't checkout a #{self.class}"
37
+ end
38
+
39
+ def save
40
+ raise SaveError, "Can't save a #{self.class}"
41
+ end
42
+
43
+ end # module Generic
44
+
45
+ end # module URI
@@ -0,0 +1,30 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
3
+ # License:: GNU General Public License (GPL).
4
+ # Revision:: $Id: verbose_object.rb 222 2005-05-09 12:44:32Z ertai $
5
+
6
+ class VerboseObject
7
+
8
+ def initialize ( anObject )
9
+ @obj = anObject
10
+ end
11
+
12
+ instance_methods.each do |meth|
13
+ next if meth =~ /__.*__/
14
+ module_eval %Q{
15
+ def #{meth} ( *a, &b )
16
+ log(:#{meth}, *a)
17
+ @obj.__send__(:#{meth}, *a, &b)
18
+ end
19
+ }
20
+ end
21
+
22
+ def log ( *a )
23
+ STDERR.puts "LOG: #{a.inspect}"
24
+ end
25
+
26
+ def method_missing ( *a, &b )
27
+ log(*a)
28
+ end
29
+
30
+ end # class VerboseObject
@@ -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: version.rb 101 2005-01-15 07:58:58Z polrop $
7
+
8
+
9
+ class Version
10
+ include Comparable
11
+
12
+ attr_accessor :major, :minor, :revision
13
+
14
+ def initialize(major, minor, revision)
15
+ @major = major
16
+ @minor = minor
17
+ @revision = revision
18
+ end
19
+
20
+ def <=>(other)
21
+ if @major == other.major
22
+ if @minor == other.minor
23
+ @revision <=> other.revision
24
+ else
25
+ @minor <=> other.minor
26
+ end
27
+ else
28
+ @major <=> other.major
29
+ end
30
+ end
31
+
32
+ def to_s
33
+ "#@major.#@minor.#@revision"
34
+ end
35
+
36
+ def to_a
37
+ [ @major, @minor, @revision ]
38
+ end
39
+
40
+ end # class Version
41
+
42
+
43
+ if defined? TEST_MODE or __FILE__ == $0
44
+
45
+
46
+ require 'test/unit/ui/yaml/testrunner'
47
+
48
+
49
+ class VersionTest < Test::Unit::TestCase
50
+
51
+ def test_simple
52
+ assert(Version.new(1, 2, 3) < Version.new(1, 2, 4))
53
+ assert(Version.new(1, 2, 4) > Version.new(1, 2, 3))
54
+ assert(Version.new(1, 2, 3) == Version.new(1, 2, 3))
55
+ assert(Version.new(1, 3, 3) > Version.new(1, 2, 3))
56
+ assert(Version.new(1, 2, 3) < Version.new(1, 3, 3))
57
+ assert(Version.new(2, 2, 3) > Version.new(1, 2, 3))
58
+ assert(Version.new(1, 2, 3) < Version.new(2, 2, 3))
59
+ end
60
+
61
+ end # class VersionTest
62
+
63
+
64
+ end
65
+
66
+
@@ -0,0 +1,63 @@
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: basenode_ext.rb 53 2004-12-02 22:24:03Z ertai $
7
+
8
+ require 'yaml'
9
+ require 'yaml/basenode'
10
+
11
+ module YAML
12
+
13
+ module BaseNode
14
+
15
+ def ordered_children_with_index
16
+ arr = children_with_index
17
+ arr.sort! { |a,b| b[0].object_id <=> a[0].object_id } unless arr.nil?
18
+ arr
19
+ end
20
+
21
+ def ordered_children_indexes
22
+ arr = ordered_children_with_index
23
+ arr.map! { |x| x[1] } unless arr.nil?
24
+ arr
25
+ end
26
+
27
+ def ordered_children
28
+ arr = children
29
+ arr.map! { |x| x[0] } unless arr.nil?
30
+ arr
31
+ end
32
+
33
+ end # module BaseNode
34
+
35
+ end # module YAML
36
+
37
+
38
+ if defined? TEST_MODE or $0 == __FILE__
39
+
40
+ require 'test/unit'
41
+ class BaseNodeExtTest < Test::Unit::TestCase
42
+
43
+ def basenode_checker ( my, ref )
44
+ node = YAML::parse(my)
45
+ assert_equal(node.ordered_children_indexes, ref)
46
+ end
47
+
48
+ def test_basenode1
49
+ basenode_checker('--- { d: 4, a: 1, b: 2, c: 3 }', ["d", "a", "b", "c"])
50
+ end
51
+
52
+ def test_basenode2
53
+ basenode_checker('--- { a: 1, d: 42, b: 2, c: 3 }', ["a", "d", "b", "c"])
54
+ end
55
+
56
+ def test_basenode3
57
+ basenode_checker(
58
+ '--- { a: :"1", d: "foo", b: [2,3], c: {} }', ["a", "d", "b", "c"])
59
+ end
60
+
61
+ end # class BaseNodeExtTest
62
+
63
+ end