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
This commit is contained in:
parent
6ad68ae027
commit
ad18cfda32
|
@ -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_verbose = 'This template must be used with --debug option\n'
|
||||||
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodate}</date>\n<paths>\n{files}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodate}</date>\n<paths>\n{files}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
||||||
|
|
||||||
file = '<path action="M">{file|escape}</path>\n'
|
file = '<path action="M">{file|urlescape}</path>\n'
|
||||||
file_add = '<path action="A">{file_add|escape}</path>\n'
|
file_add = '<path action="A">{file_add|urlescape}</path>\n'
|
||||||
file_del = '<path action="D">{file_del|escape}</path>\n'
|
file_del = '<path action="D">{file_del|urlescape}</path>\n'
|
||||||
file_copy = '<path-copied copyfrom-path="{source|escape}">{name|urlescape}</path-copied>\n'
|
file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
|
||||||
tag = '<tag>{tag|escape}</tag>\n'
|
tag = '<tag>{tag|escape}</tag>\n'
|
||||||
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
||||||
# footer="</log>"
|
# footer="</log>"
|
|
@ -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_verbose = 'This template must be used with --debug option\n'
|
||||||
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodatesec}</date>\n<paths>\n{file_mods}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodatesec}</date>\n<paths>\n{file_mods}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
||||||
|
|
||||||
file_mod = '<path action="M">{file_mod|escape}</path>\n'
|
file_mod = '<path action="M">{file_mod|urlescape}</path>\n'
|
||||||
file_add = '<path action="A">{file_add|escape}</path>\n'
|
file_add = '<path action="A">{file_add|urlescape}</path>\n'
|
||||||
file_del = '<path action="D">{file_del|escape}</path>\n'
|
file_del = '<path action="D">{file_del|urlescape}</path>\n'
|
||||||
file_copy = '<path-copied copyfrom-path="{source|escape}">{name|urlescape}</path-copied>\n'
|
file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
|
||||||
tag = '<tag>{tag|escape}</tag>\n'
|
tag = '<tag>{tag|escape}</tag>\n'
|
||||||
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
||||||
# footer="</log>"
|
# footer="</log>"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
require 'redmine/scm/adapters/abstract_adapter'
|
require 'redmine/scm/adapters/abstract_adapter'
|
||||||
|
require 'cgi'
|
||||||
|
|
||||||
module Redmine
|
module Redmine
|
||||||
module Scm
|
module Scm
|
||||||
|
@ -127,8 +128,8 @@ module Redmine
|
||||||
from_rev = logentry.attributes['revision']
|
from_rev = logentry.attributes['revision']
|
||||||
end
|
end
|
||||||
paths << {:action => path.attributes['action'],
|
paths << {:action => path.attributes['action'],
|
||||||
:path => "/#{path.text}",
|
:path => "/#{CGI.unescape(path.text)}",
|
||||||
:from_path => from_path ? "/#{from_path}" : nil,
|
:from_path => from_path ? "/#{CGI.unescape(from_path)}" : nil,
|
||||||
:from_revision => from_rev ? from_rev : nil
|
:from_revision => from_rev ? from_rev : nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue