]> source.dussan.org Git - redmine.git/commitdiff
Fixed: non-ASCII subversion path can't be displayed (patch #1993 by Chaoqun Zou).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 10 Nov 2008 11:33:04 +0000 (11:33 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 10 Nov 2008 11:33:04 +0000 (11:33 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2004 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/subversion_adapter.rb

index 2b7f0192e12ab30cc4735c9a00c6330e4bc1b668..dff225e44d3d2444db5a920cce2f789b13dc78c5 100644 (file)
@@ -17,6 +17,7 @@
 \r
 require 'redmine/scm/adapters/abstract_adapter'\r
 require 'rexml/document'\r
+require 'uri'\r
 \r
 module Redmine\r
   module Scm\r
@@ -76,7 +77,7 @@ module Redmine
           path ||= ''\r
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"\r
           entries = Entries.new\r
-          cmd = "#{SVN_BIN} list --xml #{target(path)}@#{identifier}"\r
+          cmd = "#{SVN_BIN} list --xml #{target(URI.escape(path))}@#{identifier}"\r
           cmd << credentials_string\r
           shellout(cmd) do |io|\r
             output = io.read\r
@@ -86,7 +87,7 @@ module Redmine
                 # Skip directory if there is no commit date (usually that\r
                 # means that we don't have read access to it)\r
                 next if entry.attributes['kind'] == 'dir' && entry.elements['commit'].elements['date'].nil?\r
-                entries << Entry.new({:name => entry.elements['name'].text,\r
+                entries << Entry.new({:name => URI.unescape(entry.elements['name'].text),\r
                             :path => ((path.empty? ? "" : "#{path}/") + entry.elements['name'].text),\r
                             :kind => entry.attributes['kind'],\r
                             :size => (entry.elements['size'] and entry.elements['size'].text).to_i,\r
@@ -112,7 +113,7 @@ module Redmine
           return nil unless self.class.client_version_above?([1, 5, 0])\r
           \r
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"\r
-          cmd = "#{SVN_BIN} proplist --verbose --xml #{target(path)}@#{identifier}"\r
+          cmd = "#{SVN_BIN} proplist --verbose --xml #{target(URI.escape(path))}@#{identifier}"\r
           cmd << credentials_string\r
           properties = {}\r
           shellout(cmd) do |io|\r
@@ -137,7 +138,7 @@ module Redmine
           cmd = "#{SVN_BIN} log --xml -r #{identifier_from}:#{identifier_to}"\r
           cmd << credentials_string\r
           cmd << " --verbose " if  options[:with_paths]\r
-          cmd << ' ' + target(path)\r
+          cmd << ' ' + target(URI.escape(path))\r
           shellout(cmd) do |io|\r
             begin\r
               doc = REXML::Document.new(io)\r
@@ -174,7 +175,7 @@ module Redmine
           cmd = "#{SVN_BIN} diff -r "\r
           cmd << "#{identifier_to}:"\r
           cmd << "#{identifier_from}"\r
-          cmd << " #{target(path)}@#{identifier_from}"\r
+          cmd << " #{target(URI.escape(path))}@#{identifier_from}"\r
           cmd << credentials_string\r
           diff = []\r
           shellout(cmd) do |io|\r
@@ -188,7 +189,7 @@ module Redmine
         \r
         def cat(path, identifier=nil)\r
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"\r
-          cmd = "#{SVN_BIN} cat #{target(path)}@#{identifier}"\r
+          cmd = "#{SVN_BIN} cat #{target(URI.escape(path))}@#{identifier}"\r
           cmd << credentials_string\r
           cat = nil\r
           shellout(cmd) do |io|\r
@@ -201,7 +202,7 @@ module Redmine
         \r
         def annotate(path, identifier=nil)\r
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"\r
-          cmd = "#{SVN_BIN} blame #{target(path)}@#{identifier}"\r
+          cmd = "#{SVN_BIN} blame #{target(URI.escape(path))}@#{identifier}"\r
           cmd << credentials_string\r
           blame = Annotate.new\r
           shellout(cmd) do |io|\r