diff --git a/app/models/repository/cvs.rb b/app/models/repository/cvs.rb index a0202f1..d95b5f1 100644 --- a/app/models/repository/cvs.rb +++ b/app/models/repository/cvs.rb @@ -128,7 +128,7 @@ class Repository::Cvs < Repository fetch_since = latest_changeset ? latest_changeset.committed_on : nil transaction do tmp_rev_num = 1 - scm.revisions('', fetch_since, nil, :with_paths => true) do |revision| + scm.revisions('', fetch_since, nil, :log_encoding => repo_log_encoding) do |revision| # only add the change to the database, if it doen't exists. the cvs log # is not exclusive at all. tmp_time = revision.time.clone diff --git a/lib/redmine/scm/adapters/cvs_adapter.rb b/lib/redmine/scm/adapters/cvs_adapter.rb index 059f5ce..06ab155 100644 --- a/lib/redmine/scm/adapters/cvs_adapter.rb +++ b/lib/redmine/scm/adapters/cvs_adapter.rb @@ -239,9 +239,10 @@ module Redmine revision = $1 elsif /^date:\s+(\d+.\d+.\d+\s+\d+:\d+:\d+)/ =~ line date = Time.parse($1) - # TODO: This regexp fails in some non UTF-8 chars on Ruby 1.8. - author = /author: ([^;]+)/.match(line)[1] - file_state = /state: ([^;]+)/.match(line)[1] + line_utf8 = scm_iconv('UTF-8', options[:log_encoding], line) + author_utf8 = /author: ([^;]+)/.match(line_utf8)[1] + author = scm_iconv(options[:log_encoding], 'UTF-8', author_utf8) + file_state = /state: ([^;]+)/.match(line)[1] # TODO: # linechanges only available in CVS.... # maybe a feature our SVN implementation. diff --git a/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb index 20be708..455d2b4 100644 --- a/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb @@ -24,7 +24,7 @@ begin def test_revisions_all cnt = 0 - @adapter.revisions('', nil, nil, :with_paths => true) do |revision| + @adapter.revisions('', nil, nil, :log_encoding => 'UTF-8') do |revision| cnt += 1 end assert_equal 16, cnt @@ -33,7 +33,7 @@ begin def test_revisions_from_rev3 rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22) cnt = 0 - @adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision| + @adapter.revisions('', rev3_committed_on, nil, :log_encoding => 'UTF-8') do |revision| cnt += 1 end assert_equal 4, cnt