summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2023-11-16 11:13:39 +0000
committerGo MAEDA <maeda@farend.jp>2023-11-16 11:13:39 +0000
commitfa7c481028c5fcbe473e213387f8d2347ff65e26 (patch)
treee648818d0aaaaa2fd95dd869a12f8077f5e2597c
parent57ee20d92ff2e90230309eef7c8938405317b26c (diff)
downloadredmine-fa7c481028c5fcbe473e213387f8d2347ff65e26.tar.gz
redmine-fa7c481028c5fcbe473e213387f8d2347ff65e26.zip
Auto-detection of field wrapper type when importing CSV file (#39511).
Patch by Go MAEDA. git-svn-id: https://svn.redmine.org/redmine/trunk@22440 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/import.rb3
-rw-r--r--test/unit/issue_import_test.rb15
2 files changed, 17 insertions, 1 deletions
diff --git a/app/models/import.rb b/app/models/import.rb
index fe3f24fab..2674606bb 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -65,12 +65,14 @@ class Import < ActiveRecord::Base
def set_default_settings(options={})
separator = lu(user, :general_csv_separator)
+ wrapper = '"'
encoding = lu(user, :general_csv_encoding)
if file_exists?
begin
content = File.read(filepath, 256)
separator = [',', ';'].max_by {|sep| content.count(sep)}
+ wrapper = ['"', "'"].max_by {|quote_char| content.count(quote_char)}
guessed_encoding = Redmine::CodesetUtil.guess_encoding(content)
encoding =
@@ -81,7 +83,6 @@ class Import < ActiveRecord::Base
rescue => e
end
end
- wrapper = '"'
date_format = lu(user, "date.formats.default", :default => "foo")
date_format = DATE_FORMATS.first unless DATE_FORMATS.include?(date_format)
diff --git a/test/unit/issue_import_test.rb b/test/unit/issue_import_test.rb
index d68f0e44c..00c13e0bb 100644
--- a/test/unit/issue_import_test.rb
+++ b/test/unit/issue_import_test.rb
@@ -463,4 +463,19 @@ class IssueImportTest < ActiveSupport::TestCase
assert_equal 'CP932', guessed_encoding
end
end
+
+ def test_set_default_settings_should_detect_field_wrapper
+ to_test = {
+ 'import_issues.csv' => '"',
+ 'import_issues_single_quotation.csv' => "'",
+ # Use '"' as a wrapper for CSV file with no wrappers
+ 'import_dates.csv' => '"',
+ }
+
+ to_test.each do |file, expected|
+ import = generate_import(file)
+ import.set_default_settings
+ assert_equal expected, import.settings['wrapper']
+ end
+ end
end