]> source.dussan.org Git - redmine.git/commitdiff
scm: mercurial: log and entries path encoding support in adapter (#2664).
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Tue, 22 Feb 2011 08:47:19 +0000 (08:47 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Tue, 22 Feb 2011 08:47:19 +0000 (08:47 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4923 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/mercurial_adapter.rb

index e8c5fe88359e673459e9c307d97e71f68b9df347..9021e1d9234cf9d8c48a8edfc8624418e8cc81e0 100644 (file)
@@ -129,8 +129,9 @@ module Redmine
         private :summary
 
         def entries(path=nil, identifier=nil)
+          p1 = scm_iconv(@path_encoding, 'UTF-8', path)
           manifest = hg('rhmanifest', '-r', hgrev(identifier),
-                        CGI.escape(without_leading_slash(path.to_s))) do |io|
+                        CGI.escape(without_leading_slash(p1.to_s))) do |io|
             begin
               ActiveSupport::XmlMini.parse(io.read)['rhmanifest']['repository']['manifest']
             rescue
@@ -140,13 +141,13 @@ module Redmine
 
           entries = Entries.new
           as_ary(manifest['dir']).each do |e|
-            n = CGI.unescape(e['name'])
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
             p = "#{path_prefix}#{n}"
             entries << Entry.new(:name => n, :path => p, :kind => 'dir')
           end
 
           as_ary(manifest['file']).each do |e|
-            n = CGI.unescape(e['name'])
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
             p = "#{path_prefix}#{n}"
             lr = Revision.new(:revision => e['revision'], :scmid => e['node'],
                               :identifier => e['node'],
@@ -188,7 +189,7 @@ module Redmine
             cpmap = Hash[*cpalist.flatten]
 
             paths = as_ary(le['paths']['path']).map do |e|
-              p = CGI.unescape(e['__content__'])
+              p = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['__content__']) )
               {:action => e['action'], :path => with_leading_slash(p),
                :from_path => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
                :from_revision => (cpmap.member?(p) ? le['revision'] : nil)}
@@ -211,7 +212,10 @@ module Redmine
           else
             hg_args << '-c' << hgrev(identifier_from)
           end
-          hg_args << CGI.escape(hgtarget(path)) unless path.blank?
+          unless path.blank?
+            p = scm_iconv(@path_encoding, 'UTF-8', path)
+            hg_args << CGI.escape(hgtarget(p))
+          end
           diff = []
           hg *hg_args do |io|
             io.each_line do |line|