From ad18cfda32debd5e183baf167af386d797365ffa Mon Sep 17 00:00:00 2001 From: Toshi MARUYAMA Date: Wed, 5 Jan 2011 15:02:24 +0000 Subject: [PATCH] scm: mercurial: escape any filenames by urlescape (#2664, #7064). In Mercurial, filename is not UTF-8 but byte-string. So it should be escaped to UTF-8-safe string before parsing as XML document. NOTE: Mercurial's {|obfuscate} filter cannot be used here, because it treats filename as encoded by HGENCODING. Contributed by Yuya Nishihara. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4633 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl | 8 ++++---- lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl | 8 ++++---- lib/redmine/scm/adapters/mercurial_adapter.rb | 5 +++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl b/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl index b3029e6ff..3cf584aed 100644 --- a/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl +++ b/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl @@ -3,10 +3,10 @@ changeset_quiet = 'This template must be used with --debug option\n' changeset_verbose = 'This template must be used with --debug option\n' changeset_debug = '\n{author|escape}\n{date|isodate}\n\n{files}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file = '{file|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file = '{file|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' # footer="" \ No newline at end of file diff --git a/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl b/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl index b6cc7a786..def80c262 100644 --- a/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl +++ b/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl @@ -3,10 +3,10 @@ changeset_quiet = 'This template must be used with --debug option\n' changeset_verbose = 'This template must be used with --debug option\n' changeset_debug = '\n{author|escape}\n{date|isodatesec}\n\n{file_mods}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file_mod = '{file_mod|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file_mod = '{file_mod|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' # footer="" diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb index 72dc5dd25..be755419f 100644 --- a/lib/redmine/scm/adapters/mercurial_adapter.rb +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'redmine/scm/adapters/abstract_adapter' +require 'cgi' module Redmine module Scm @@ -127,8 +128,8 @@ module Redmine from_rev = logentry.attributes['revision'] end paths << {:action => path.attributes['action'], - :path => "/#{path.text}", - :from_path => from_path ? "/#{from_path}" : nil, + :path => "/#{CGI.unescape(path.text)}", + :from_path => from_path ? "/#{CGI.unescape(from_path)}" : nil, :from_revision => from_rev ? from_rev : nil } end -- 2.39.5