From bf6ec48bea07f2fb9ce15823992f6306ae2719ef Mon Sep 17 00:00:00 2001 From: Toshi MARUYAMA Date: Mon, 14 Mar 2011 02:23:54 +0000 Subject: [PATCH] scm: mercurial: wrap revision of cat and annotate with URL encoding (#1981, #7246). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5112 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/scm/adapters/mercurial/redminehelper.py | 4 ++++ lib/redmine/scm/adapters/mercurial_adapter.rb | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/redmine/scm/adapters/mercurial/redminehelper.py b/lib/redmine/scm/adapters/mercurial/redminehelper.py index 3e82e95f7..7b3b639f2 100644 --- a/lib/redmine/scm/adapters/mercurial/redminehelper.py +++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py @@ -120,9 +120,13 @@ def _manifest(ui, repo, path, rev): ui.write('\n') def rhannotate(ui, repo, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts) def rhcat(ui, repo, file1, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts) def rhdiff(ui, repo, *pats, **opts): diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb index d5266e9bf..f39b397a2 100644 --- a/lib/redmine/scm/adapters/mercurial_adapter.rb +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb @@ -252,7 +252,7 @@ module Redmine def cat(path, identifier=nil) p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path)) - hg 'rhcat', '-r', hgrev(identifier), hgtarget(p) do |io| + hg 'rhcat', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io| io.binmode io.read end @@ -263,7 +263,7 @@ module Redmine def annotate(path, identifier=nil) p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path)) blame = Annotate.new - hg 'rhannotate', '-ncu', '-r', hgrev(identifier), hgtarget(p) do |io| + hg 'rhannotate', '-ncu', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io| io.each_line do |line| line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding) next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$}