Fix compiler warning due to missing function prototype.
[svn.git] / subversion / bindings / swig / ruby / svn / error.rb
blob72415c1651d41a69229e5ee4bf3e7712fbd6d825
1 require "svn/util"
2 require "svn/ext/core"
4 module Svn
5   class Error < StandardError
6     class << self
7       # This is for backward compatibility with 1.4 or earlier.
8       def new_corresponding_error(*args)
9         SvnError.new_corresponding_error(*args)
10       end
11     end
13     class SvnError < Error
14       TABLE = {}
16       class << self
17         def new_corresponding_error(code, message, file=nil, line=nil)
18           if TABLE.has_key?(code)
19             TABLE[code].new(message, file, line)
20           else
21             new(code, message, file, line)
22           end
23         end
24       end
26       attr_reader :code, :error_message, :file, :line
27       def initialize(code, message, file=nil, line=nil)
28         @code = code
29         @error_message = message
30         @file = file
31         @line = line
32         msg = ""
33         if file
34           msg << "#{file}"
35           msg << ":#{line}" if line
36           msg << " "
37         end
38         msg << @error_message
39         super(Converter.to_locale_encoding(msg))
40       end
41     end
43     Ext::Core.constants.each do |const_name|
44       if /^SVN_ERR_(.*)/ =~ const_name
45         error_const_name = $1
46         next if /_CATEGORY_START\z/ =~ error_const_name
47         error_class_name = Util.to_ruby_class_name(error_const_name)
48         value = Ext::Core.const_get(const_name)
49         module_eval(<<-EOC, __FILE__, __LINE__ + 1)
50           class #{error_class_name} < SvnError
51             def initialize(message="", file=nil, line=nil)
52               super(#{value}, message, file, line)
53             end
54           end
55           # This is for backward compatibility with 1.4 or earlier.
56           #{error_const_name} = #{error_class_name}
57         EOC
58         SvnError::TABLE[value] = const_get(error_class_name)
59       end
60     end
62     class FsAlreadyClose < Error
63     end
65     class ReposAlreadyClose < Error
66     end
68     WcMismatchedChangeList = WcMismatchedChangelist
69   end
70 end