vcs 0.2.148 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/AUTHORS +6 -0
  2. data/NEWS +9 -0
  3. data/README +82 -0
  4. data/Rakefile +7 -72
  5. data/SPEC.dyn.yml +10 -0
  6. data/SPEC.gemspec +14 -0
  7. data/SPEC.yml +39 -0
  8. data/bin/vcs +18 -16
  9. data/lib/vcs/changelog.rb +164 -0
  10. data/lib/vcs/conflict.rb +21 -0
  11. data/{src → lib/vcs}/cvs.rb +1 -1
  12. data/{src → lib/vcs}/diff.rb +2 -2
  13. data/lib/vcs/diffstat.rb +28 -0
  14. data/lib/vcs/edit.rb +16 -0
  15. data/{src → lib/vcs}/last_changed_date.rb +3 -5
  16. data/{src → lib/vcs}/mail.rb +4 -4
  17. data/lib/vcs/message.rb +79 -0
  18. data/{src → lib/vcs}/mycommit.rb +15 -15
  19. data/{src → lib/vcs}/news.rb +6 -6
  20. data/{src → lib/vcs}/prcs.rb +1 -1
  21. data/{src → lib/vcs}/revision.rb +3 -4
  22. data/lib/vcs/script.rb +19 -0
  23. data/{src → lib/vcs}/status.rb +1 -1
  24. data/{src → lib/vcs}/svn.rb +3 -5
  25. data/lib/vcs/url.rb +16 -0
  26. data/lib/vcs/vcs.rb +279 -0
  27. metadata +52 -150
  28. data/TODO +0 -19
  29. data/doc/jamis.rb +0 -564
  30. data/ruby_ex/abstract.rb +0 -254
  31. data/ruby_ex/abstract_node.rb +0 -85
  32. data/ruby_ex/algorithms/simulated_annealing.rb +0 -140
  33. data/ruby_ex/array_each_pair.rb +0 -18
  34. data/ruby_ex/ask.rb +0 -101
  35. data/ruby_ex/attributed_class.rb +0 -302
  36. data/ruby_ex/cache.rb +0 -373
  37. data/ruby_ex/checkout.rb +0 -12
  38. data/ruby_ex/choose.rb +0 -271
  39. data/ruby_ex/commands.rb +0 -18
  40. data/ruby_ex/commands/command.rb +0 -401
  41. data/ruby_ex/commands/datas.rb +0 -16
  42. data/ruby_ex/commands/datas/data.rb +0 -33
  43. data/ruby_ex/commands/datas/factory.rb +0 -66
  44. data/ruby_ex/commands/factory.rb +0 -66
  45. data/ruby_ex/commands/helpers.rb +0 -67
  46. data/ruby_ex/commands/pipe.rb +0 -64
  47. data/ruby_ex/commands/runners.rb +0 -17
  48. data/ruby_ex/commands/runners/exec.rb +0 -49
  49. data/ruby_ex/commands/runners/fork.rb +0 -97
  50. data/ruby_ex/commands/runners/runner.rb +0 -107
  51. data/ruby_ex/commands/seq.rb +0 -27
  52. data/ruby_ex/config_file.rb +0 -96
  53. data/ruby_ex/const_regexp.rb +0 -59
  54. data/ruby_ex/daemon.rb +0 -134
  55. data/ruby_ex/diff.rb +0 -667
  56. data/ruby_ex/dlogger.rb +0 -62
  57. data/ruby_ex/drb/dispatcher.rb +0 -252
  58. data/ruby_ex/drb/dispatcher_server_test.rb +0 -29
  59. data/ruby_ex/drb/drb_observable.rb +0 -97
  60. data/ruby_ex/drb/drb_observable_pool.rb +0 -27
  61. data/ruby_ex/drb/drb_service.rb +0 -43
  62. data/ruby_ex/drb/drb_undumped_attributes.rb +0 -55
  63. data/ruby_ex/drb/drb_undumped_indexed_object.rb +0 -54
  64. data/ruby_ex/drb/insecure_protected_methods.rb +0 -103
  65. data/ruby_ex/drb/session_client_test.rb +0 -40
  66. data/ruby_ex/drb/session_manager.rb +0 -246
  67. data/ruby_ex/drb/session_server.rb +0 -53
  68. data/ruby_ex/dtime.rb +0 -143
  69. data/ruby_ex/dumpable_proc.rb +0 -63
  70. data/ruby_ex/exception.rb +0 -32
  71. data/ruby_ex/filetype.rb +0 -229
  72. data/ruby_ex/fileutils_ex.rb +0 -44
  73. data/ruby_ex/fold.rb +0 -58
  74. data/ruby_ex/generate_id.rb +0 -44
  75. data/ruby_ex/hookable.rb +0 -262
  76. data/ruby_ex/hooker.rb +0 -54
  77. data/ruby_ex/inactive_timeout.rb +0 -137
  78. data/ruby_ex/indexed_node.rb +0 -66
  79. data/ruby_ex/io_marshal.rb +0 -100
  80. data/ruby_ex/ioo.rb +0 -194
  81. data/ruby_ex/labeled_node.rb +0 -63
  82. data/ruby_ex/logger_observer.rb +0 -23
  83. data/ruby_ex/md5sum.rb +0 -66
  84. data/ruby_ex/mktemp.rb +0 -208
  85. data/ruby_ex/module/attr_once.rb +0 -36
  86. data/ruby_ex/module/autoload_tree.rb +0 -75
  87. data/ruby_ex/module/hierarchy.rb +0 -335
  88. data/ruby_ex/module/instance_method_visibility.rb +0 -73
  89. data/ruby_ex/module_ex.rb +0 -11
  90. data/ruby_ex/node.rb +0 -80
  91. data/ruby_ex/object_monitor.rb +0 -145
  92. data/ruby_ex/object_monitor_activity.rb +0 -33
  93. data/ruby_ex/observable.rb +0 -140
  94. data/ruby_ex/observable_pool.rb +0 -293
  95. data/ruby_ex/orderedhash.rb +0 -252
  96. data/ruby_ex/pathname_ex.rb +0 -152
  97. data/ruby_ex/pp_hierarchy.rb +0 -29
  98. data/ruby_ex/pseudo_cache.rb +0 -190
  99. data/ruby_ex/queue.rb +0 -56
  100. data/ruby_ex/random_generators.rb +0 -25
  101. data/ruby_ex/random_generators/random_generator.rb +0 -31
  102. data/ruby_ex/random_generators/ruby.rb +0 -23
  103. data/ruby_ex/safe_eval.rb +0 -348
  104. data/ruby_ex/sendmail.rb +0 -215
  105. data/ruby_ex/service_manager.rb +0 -121
  106. data/ruby_ex/session/administrable.rb +0 -120
  107. data/ruby_ex/session/client.rb +0 -153
  108. data/ruby_ex/session/const.rb +0 -18
  109. data/ruby_ex/session/dispatcher.rb +0 -184
  110. data/ruby_ex/session/error.rb +0 -21
  111. data/ruby_ex/session/fetchable.rb +0 -57
  112. data/ruby_ex/session/fetcher.rb +0 -62
  113. data/ruby_ex/session/hookable.rb +0 -26
  114. data/ruby_ex/session/profile.rb +0 -110
  115. data/ruby_ex/session/server.rb +0 -582
  116. data/ruby_ex/session/test/administrable_test.rb +0 -337
  117. data/ruby_ex/session/test/basic_test.rb +0 -523
  118. data/ruby_ex/session/test/dispatcher_test.rb +0 -409
  119. data/ruby_ex/session/test/fetchable_test.rb +0 -119
  120. data/ruby_ex/session/test/sub_server_test.rb +0 -188
  121. data/ruby_ex/shuffle.rb +0 -30
  122. data/ruby_ex/spring.rb +0 -136
  123. data/ruby_ex/spring_set.rb +0 -137
  124. data/ruby_ex/string_ex.rb +0 -28
  125. data/ruby_ex/symtbl.rb +0 -106
  126. data/ruby_ex/synflow.rb +0 -474
  127. data/ruby_ex/test/unit/ui/yaml/testrunner.rb +0 -164
  128. data/ruby_ex/thread_mutex.rb +0 -10
  129. data/ruby_ex/timeout_ex.rb +0 -81
  130. data/ruby_ex/top_down.rb +0 -73
  131. data/ruby_ex/trace.rb +0 -26
  132. data/ruby_ex/uri/druby.rb +0 -81
  133. data/ruby_ex/uri/file.rb +0 -65
  134. data/ruby_ex/uri/ftp_ex.rb +0 -37
  135. data/ruby_ex/uri/http_ex.rb +0 -43
  136. data/ruby_ex/uri/ssh.rb +0 -92
  137. data/ruby_ex/uri/svn.rb +0 -118
  138. data/ruby_ex/uri_ex.rb +0 -45
  139. data/ruby_ex/verbose_object.rb +0 -30
  140. data/ruby_ex/version.rb +0 -66
  141. data/ruby_ex/yaml/basenode_ext.rb +0 -63
  142. data/ruby_ex/yaml/chop_header.rb +0 -23
  143. data/ruby_ex/yaml/transform.rb +0 -449
  144. data/ruby_ex/yaml/yregexpath.rb +0 -76
  145. data/src/ask.rb +0 -101
  146. data/src/changelog.rb +0 -117
  147. data/src/conflict.rb +0 -20
  148. data/src/diffstat.rb +0 -42
  149. data/src/message.rb +0 -64
  150. data/src/reply-mail.rb +0 -14
  151. data/src/tools.rb +0 -22
  152. data/src/vcs.rb +0 -176
@@ -1,76 +0,0 @@
1
- # Author:: Marco Tessari <marco.tessari@epita.fr>.
2
- # Copyright:: Copyright (c) 2004 TTK Team. All rights reserved.
3
- # License:: Ruby license.
4
-
5
- # $LastChangedBy: polrop $
6
- # $Id: yregexpath.rb 159 2005-02-18 12:07:23Z polrop $
7
-
8
- module YAML
9
-
10
- class YRegexPath
11
- attr_reader :segments, :root, :wanted_node_index
12
-
13
- def initialize ( str )
14
- raise ArgumentError, 'Argument must be a string' unless str.is_a?(String)
15
- @segments = []
16
- @wanted_node_index = nil
17
- @root = (str[0] == ?/)
18
- while str =~ /^(\/|#)?((?:(?:\\.)|[^\\=\/#])+)(?:=((?:(?:\\.)|[^\\\/#])*))?/
19
- if ($1 == "#")
20
- if (@wanted_node_index.nil?)
21
- @wanted_node_index = @segments.length
22
- else
23
- raise ArgumentError, 'More than a "#" given.'
24
- end
25
- end
26
- if ($3.nil?)
27
- @segments << Regexp.new($2)
28
- else
29
- @segments << [ Regexp.new($2), Regexp.new($3) ]
30
- end
31
- str = $'
32
- end
33
- @wanted_node_index = @segments.length if @wanted_node_index.nil?
34
- end
35
- end
36
-
37
- end # module YAML
38
-
39
- if defined? TEST_MODE or $0 == __FILE__
40
-
41
- require 'test/unit'
42
-
43
- class YRegexPathTest < Test::Unit::TestCase
44
- def compare(str, tab)
45
- tab.collect! do |e|
46
- if (e.is_a?(Array))
47
- e.collect! { |s| Regexp.new(s) unless s.nil? }
48
- else
49
- Regexp.new(e)
50
- end
51
- end
52
- desc = "Compare #{str} with #{tab}."
53
- assert_equal(tab, YAML::YRegexPath.new(str).segments, desc)
54
- end
55
-
56
- def testit
57
- compare('mho', [ 'mho' ])
58
- compare('mho\\', [ 'mho' ])
59
- compare('/mho', [ 'mho' ])
60
- compare('/mho=42', [ [ 'mho', '42'] ])
61
- compare('/mho=[0-9]+', [ [ 'mho', '[0-9]+' ] ])
62
- compare('m\/ho', [ 'm\/ho' ])
63
- compare('mho/foo', [ 'mho', 'foo' ])
64
- compare('mho=35/foo=test', [ [ 'mho' , '35' ], [ 'foo' , 'test' ] ])
65
- compare('test#status=PASS', [ 'test' , [ 'status' , 'PASS' ] ])
66
- compare('mho#', [ 'mho' ])
67
- end
68
-
69
- def test_errors
70
- # Build with something else than a String.
71
- assert_raise(ArgumentError) { YAML::YRegexPath.new(42) }
72
- # Two '#'.
73
- assert_raise(ArgumentError) { YAML::YRegexPath.new('1#2#3') }
74
- end
75
- end
76
- end
data/src/ask.rb DELETED
@@ -1,101 +0,0 @@
1
- # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
- # Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
3
- # License:: GNU General Public License (GPL).
4
-
5
- # $LastChangedBy: ertai $
6
- # $Id: header 98 2004-09-29 12:07:43Z ertai $
7
-
8
- ANSWERS = [ :y, :n ]
9
- ANSWER_NOT_VALID = 'Not a valid answer, please answer correctly'
10
-
11
- # `ask', ask the user to answer, to your question.
12
- #
13
- # Example:
14
- # ask('Commiting, are you sure', :n)
15
- #
16
- # produce => Commiting, are you sure (y/N):
17
- # and wait your answer.
18
- def ask ( aQuestion, theDefaultAnswer=:y, cin=STDIN, cout=STDOUT, cerr=STDERR )
19
-
20
- yn = case theDefaultAnswer
21
- when :y then ' [Y/n]: '
22
- when :n then ' [y/N]: '
23
- else raise ArgumentError, "not valid default answer #{theDefaultAnswer}"
24
- end
25
-
26
- loop do
27
- cout.print aQuestion, yn
28
- cout.flush
29
-
30
- answer = cin.readline.chomp.downcase
31
-
32
- return theDefaultAnswer if answer.empty?
33
-
34
- answer = answer.to_sym
35
-
36
- return answer if ANSWERS.include? answer
37
-
38
- cerr.puts ANSWER_NOT_VALID
39
- cout.puts
40
- end
41
-
42
- end
43
-
44
- if defined? TEST_MODE or $0 == __FILE__
45
-
46
- require 'test/unit'
47
- class AskTest < Test::Unit::TestCase
48
-
49
- def ask_checker ( question, default, answer, ref, out, err )
50
- require 'stringio'
51
- cin, cout, cerr = StringIO.new, StringIO.new, StringIO.new
52
- cin.puts answer
53
- cin.rewind
54
- res = ask(question, default, cin, cout, cerr)
55
- cout.rewind
56
- cerr.rewind
57
- assert_equal(res, ref, 'bad return value')
58
- assert_equal(cout.readlines.join, out, 'bad standard output')
59
- assert_equal(cerr.readlines.join, err, 'bad error output')
60
- end
61
-
62
- def test_bad_default
63
- assert_raise(ArgumentError) { ask_checker('Q', :foo, '', :y, [], []) }
64
- assert_nothing_raised do
65
- ask_checker('Q', :y, 'y', :y, 'Q [Y/n]: ', '')
66
- end
67
- assert_nothing_raised do
68
- ask_checker('Q', :n, 'y', :y, 'Q [y/N]: ', '')
69
- end
70
- end
71
-
72
- def test_valid_default_yes
73
- ask_checker('Q', :y, 'y', :y, 'Q [Y/n]: ', '')
74
- ask_checker('Q', :y, 'Y', :y, 'Q [Y/n]: ', '')
75
- ask_checker('Q', :y, 'n', :n, 'Q [Y/n]: ', '')
76
- ask_checker('Q', :y, 'N', :n, 'Q [Y/n]: ', '')
77
- ask_checker('Q', :y, '', :y, 'Q [Y/n]: ', '')
78
- end
79
-
80
- def test_valid_default_no
81
- ask_checker('Q', :n, 'y', :y, 'Q [y/N]: ', '')
82
- ask_checker('Q', :n, 'Y', :y, 'Q [y/N]: ', '')
83
- ask_checker('Q', :n, 'n', :n, 'Q [y/N]: ', '')
84
- ask_checker('Q', :n, 'N', :n, 'Q [y/N]: ', '')
85
- ask_checker('Q', :n, '', :n, 'Q [y/N]: ', '')
86
- end
87
-
88
- def test_invalid_answer
89
- ask_checker('Q', :n, "bad\ny", :y,
90
- "Q [y/N]: \nQ [y/N]: ", ANSWER_NOT_VALID + "\n")
91
- ask_checker('Q', :y, "ad\n\n", :y,
92
- "Q [Y/n]: \nQ [Y/n]: ", ANSWER_NOT_VALID + "\n")
93
- end
94
-
95
- def test_ask1
96
- ask_checker('Q', :y, 'y', :y, 'Q [Y/n]: ', '')
97
- end
98
-
99
- end # class AskTest
100
-
101
- end
@@ -1,117 +0,0 @@
1
- # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
- # Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
3
- # License:: GNU General Public License (GPL).
4
-
5
- # $LastChangedBy: ertai $
6
- # $Id: header 98 2004-09-29 12:07:43Z ertai $
7
-
8
- require 'vcs'
9
- require 'svn'
10
-
11
- class Svn
12
-
13
- @@file_st =
14
- {
15
- 'A' => 'New',
16
- 'D' => 'Remove',
17
- }
18
- @@file_st.default = ''
19
-
20
- @@prop_st =
21
- {
22
- 'M' => 'Changed property'
23
- }
24
-
25
- def mkchangelog_from_status ( *args )
26
- result = []
27
- from_status(*args) do |line, file_st, prop_st, copy_st, file|
28
- next if file_st =~ /[?X]/
29
- next if file == 'ChangeLog'
30
- ls = []
31
- ls << @@file_st[file_st] if @@file_st.has_key? file_st
32
- ls << @@prop_st[prop_st].downcase if @@prop_st.has_key? prop_st
33
- result << [file, ls.join(', ')]
34
- end
35
- raise Failure, 'No changes, so no ChangeLog entry.' if result.empty?
36
- result
37
- end
38
- private :mkchangelog_from_status
39
-
40
- end # class Svn
41
-
42
-
43
- class Vcs
44
-
45
- class MustBeFilled < Exception
46
- attr_reader :file
47
- def initialize ( file )
48
- @file = file
49
- super("You must fill this file: `#{file.to_s}'")
50
- end
51
- end
52
-
53
- def mkchangelog ( *args )
54
- error_handling :changelog_failed
55
-
56
- cl = ADD_CL
57
-
58
- if cl.exist?
59
- f = cl.open('r')
60
- if f.readline !~ /^===/
61
- f.rewind
62
- return f
63
- end
64
- f.close
65
- else
66
- cl_add = mkchangelog_from_status(*args)
67
- LOG.warn "Creating a new `#{cl}' file"
68
- cl.open('w') do |f|
69
- f.puts '=== Fill this file correctly and remove this line ==='
70
- f.puts Time.now.strftime("%Y-%m-%d #{FULL_EMAIL}")
71
- f.puts
72
- cl_add.each do |file, str|
73
- f.puts "\t* #{file}: #{str}."
74
- end
75
- end
76
- end
77
-
78
- raise MustBeFilled, cl
79
- end
80
-
81
- def concat_changelog! ( *args )
82
- error_handling :changelog_failed
83
-
84
- unless CL.exist?
85
- raise Failure, "No `#{CL}', you are probably not in a valid directory."
86
- end
87
-
88
- if cl = mkchangelog(*args)
89
-
90
- unless TMP_CL.exist?
91
- LOG.info "Moving `#{CL}' to `#{TMP_CL}' ..."
92
- CL.rename(TMP_CL)
93
- end
94
-
95
- CL.open('w') do |file|
96
- LOG.info "Prepending `#{ADD_CL}' to `#{CL}' ..."
97
- file.print cl.read
98
- file.puts
99
- file.print TMP_CL.read
100
- end
101
-
102
- end
103
- end
104
-
105
- def changelog_failed
106
- if TMP_CL.exist?
107
- LOG.info "Restoring `#{CL}' from `#{TMP_CL}' ..."
108
- TMP_CL.rename(CL)
109
- end
110
- LOG.info "#{ADD_CL}: Contains your ChangeLog entry" if ADD_CL.exist?
111
- end
112
-
113
- alias_command :mkcl, :mkchangelog
114
- alias_command :ctcl, :concat_changelog
115
-
116
- end # class Vcs
117
-
@@ -1,20 +0,0 @@
1
- class Vcs
2
-
3
- def mk_conflicts_list
4
- status.grep(/^C/).each { |s| s.sub!(/^C\s+(.*)\n/, '\1') }
5
- end
6
-
7
- def edit_conflicts
8
- system("#{EDITOR} #{mk_conflicts_list}")
9
- end
10
-
11
- def resolve_conflicts
12
- conflicts = mk_conflicts_list
13
- question = "Resolve these conflicts: \n - #{conflicts.join("\n - ")}\n"
14
- if ask(question, :n) == :y
15
- return resolved(conflicts)
16
- end
17
- []
18
- end
19
-
20
- end # class Vcs
@@ -1,42 +0,0 @@
1
- # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
- # Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
3
- # License:: GNU General Public License (GPL).
4
-
5
- # $LastChangedBy: ertai $
6
- # $Id: header 98 2004-09-29 12:07:43Z ertai $
7
-
8
- require 'vcs'
9
-
10
- class Vcs
11
-
12
- # Use the diffstat command to
13
- # display statitics on your patch.
14
- def diffstat ( *a )
15
- check_diffstat
16
- patch = diff(*a)
17
- rd, wr = IO.pipe
18
- pid = fork do
19
- rd.close
20
- STDIN.reopen(patch)
21
- STDOUT.reopen(wr)
22
- exec 'diffstat'
23
- end
24
- wr.close
25
- def rd.close
26
- super
27
- Process.waitpid pid
28
- end
29
- rd
30
- end
31
- alias_command :ds, :diffstat
32
-
33
- def check_diffstat
34
- unless `diffstat -V` =~ /diffstat version/
35
- raise ArgumentError, 'The `diffstat\' tool is needed by Vcs.diffstat'
36
- end
37
- end
38
-
39
- add_conf_checker :check_diffstat
40
-
41
- end # class Vcs
42
-
@@ -1,64 +0,0 @@
1
- # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
- # Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
3
- # License:: GNU General Public License (GPL).
4
-
5
- # $LastChangedBy: ertai $
6
- # $Id: header 98 2004-09-29 12:07:43Z ertai $
7
-
8
- require 'vcs'
9
- require 'changelog'
10
-
11
- class Vcs
12
- def diffw ( *args )
13
- diff(*args)
14
- end
15
- end
16
-
17
- class Svn
18
- def diffw ( *args )
19
- diff('--diff-cmd', 'diff', '-x', '-NPbuw', *args)
20
- end
21
- end
22
-
23
- class Vcs
24
-
25
- @@message = Pathname.new(',message')
26
-
27
- def print_body ( file, options )
28
- LOG.warn "Creating a new `#{file}' file"
29
- file.open('w') do |f|
30
- f.puts options.to_yaml
31
- f.puts '---'
32
- f.puts
33
- f.print message.read
34
- end
35
- end
36
- private :print_body
37
-
38
- def message ( *args )
39
- error_handling :message_failed
40
-
41
- unless @@message.exist?
42
- cl = mkchangelog(*args)
43
- @@message.open('w') do |f|
44
- f.puts 'Index: ChangeLog'
45
- f.print cl.read.sub(/^\d+-\d+-\d+/, 'from')
46
- f.puts
47
- f.print diffstat(*args).read
48
- f.puts
49
- diffw_from_status(*args).each { |line| f.print line if line !~ /^=+$/ }
50
- end
51
- end
52
- @@message.open('r')
53
- end
54
-
55
- alias_command :msg, :message
56
-
57
- def message_failed
58
- if @@message.exist?
59
- LOG.info "#{@@message}: Contains the generated message"
60
- LOG.info ' (the ChangeLog entry, the diffstat, the diff)'
61
- end
62
- end
63
-
64
- end # class Vcs
@@ -1,14 +0,0 @@
1
-
2
-
3
- class Vcs
4
- def replymail! ( rev )
5
- mail() do |f|
6
- log("-r#{rev}").each do |line|
7
- f.print '> ', line
8
- end
9
- f.puts '[...]'
10
- f.puts
11
- f.puts 'Ok.'
12
- end
13
- end
14
- end
@@ -1,22 +0,0 @@
1
- # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
- # Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
3
- # License:: GNU General Public License (GPL).
4
-
5
- # $LastChangedBy: ertai $
6
- # $Id: header 98 2004-09-29 12:07:43Z ertai $
7
-
8
- require 'yaml'
9
- module YAML
10
-
11
- def self.chop_header ( io )
12
- aStr = io.gets
13
- raise Exception, "First line is not valid: `#{aLine}'" unless aStr =~ /^---/
14
- io.each do |aLine|
15
- break if aLine =~ /^---/
16
- aStr += aLine
17
- end
18
- YAML::load(aStr)
19
- end
20
-
21
- end # module YAML
22
-