diff options
author | Heinrich Lee Yu <hleeyu@gmail.com> | 2019-01-03 13:17:07 +0800 |
---|---|---|
committer | Heinrich Lee Yu <hleeyu@gmail.com> | 2019-01-07 11:21:30 +0800 |
commit | f54290de751e365be0928c66bb75fd106bb7aa88 (patch) | |
tree | da09c1505ede95633e7312080ab48986ae7382cb /app/services/issues | |
parent | e2698d5d7455d91fa94f9bbf1fc838f8cb142700 (diff) | |
download | gitlab-ce-f54290de751e365be0928c66bb75fd106bb7aa88.tar.gz |
Remove caching of CSV file49231-import-issues-csv
Load whole file in memory to simplify code
Diffstat (limited to 'app/services/issues')
-rw-r--r-- | app/services/issues/import_csv_service.rb | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/app/services/issues/import_csv_service.rb b/app/services/issues/import_csv_service.rb index 7fa2ecc3afd..ef08fafa7cc 100644 --- a/app/services/issues/import_csv_service.rb +++ b/app/services/issues/import_csv_service.rb @@ -2,29 +2,26 @@ module Issues class ImportCsvService - def initialize(user, project, upload) + def initialize(user, project, csv_io) @user = user @project = project - @uploader = upload.build_uploader + @csv_io = csv_io @results = { success: 0, error_lines: [], parse_error: false } end def execute - # Cache remote file locally for processing - @uploader.cache_stored_file! unless @uploader.file_storage? - process_csv email_results_to_user - cleanup_cache unless @uploader.file_storage? - @results end private def process_csv - CSV.foreach(@uploader.file.path, col_sep: detect_col_sep, headers: true).with_index(2) do |row, line_no| + csv_data = @csv_io.open(&:read).force_encoding(Encoding::UTF_8) + + CSV.new(csv_data, col_sep: detect_col_sep(csv_data.lines.first), headers: true).each.with_index(2) do |row, line_no| issue = Issues::CreateService.new(@project, @user, title: row[0], description: row[1]).execute if issue.persisted? @@ -41,9 +38,7 @@ module Issues Notify.import_issues_csv_email(@user.id, @project.id, @results).deliver_now end - def detect_col_sep - header = File.open(@uploader.file.path, &:readline) - + def detect_col_sep(header) if header.include?(",") "," elsif header.include?(";") @@ -54,12 +49,5 @@ module Issues raise CSV::MalformedCSVError end end - - def cleanup_cache - cached_file_path = @uploader.file.cache_path - - File.delete(cached_file_path) - Dir.delete(File.dirname(cached_file_path)) - end end end |