From ecc64e3925ed0bb868605c8652f41cb7fed3a6e3 Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Fri, 30 May 2025 14:11:55 +0800 Subject: [PATCH] DEV: Remove `UploadFixer` and `uploads:fix_all_extensions` rake task (#33004) The code being removed here was added 7 years ago and is stale at this point. We don't even know if it is safe to run since no tests have been written for it. Therefore, it is safer for us to remove it than to spend time reviewing it. --- .../onceoff/fix_invalid_upload_extensions.rb | 9 --- lib/tasks/uploads.rake | 4 - lib/upload_fixer.rb | 80 ------------------- 3 files changed, 93 deletions(-) delete mode 100644 app/jobs/onceoff/fix_invalid_upload_extensions.rb delete mode 100644 lib/upload_fixer.rb diff --git a/app/jobs/onceoff/fix_invalid_upload_extensions.rb b/app/jobs/onceoff/fix_invalid_upload_extensions.rb deleted file mode 100644 index a5a6f98921f..00000000000 --- a/app/jobs/onceoff/fix_invalid_upload_extensions.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -module Jobs - class FixInvalidUploadExtensions < ::Jobs::Onceoff - def execute_onceoff(args) - UploadFixer.fix_all_extensions - end - end -end diff --git a/lib/tasks/uploads.rake b/lib/tasks/uploads.rake index 3680307404f..b76fde48d3c 100644 --- a/lib/tasks/uploads.rake +++ b/lib/tasks/uploads.rake @@ -507,10 +507,6 @@ task "uploads:analyze", %i[cache_path limit] => :environment do |_, args| puts "Duration: #{Time.zone.now - now} seconds" end -task "uploads:fix_incorrect_extensions" => :environment do - UploadFixer.fix_all_extensions -end - task "uploads:recover_from_tombstone" => :environment do Rake::Task["uploads:recover"].invoke end diff --git a/lib/upload_fixer.rb b/lib/upload_fixer.rb deleted file mode 100644 index 799824b6895..00000000000 --- a/lib/upload_fixer.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -class UploadFixer - def self.fix_all_extensions - Upload - .where("uploads.extension IS NOT NULL") - .find_each { |upload| fix_extension_on_upload(upload) } - end - - def self.fix_extension_on_upload(upload) - is_external = Discourse.store.external? - previous_url = upload.url.dup - - source = - if is_external - "https:#{previous_url}" - else - Discourse.store.path_for(upload) - end - - correct_extension = FastImage.type(source).to_s.downcase - current_extension = upload.extension.to_s.downcase - - if correct_extension.present? - correct_extension = "jpg" if correct_extension == "jpeg" - current_extension = "jpg" if current_extension == "jpeg" - - if correct_extension != current_extension - new_filename = change_extension(upload.original_filename, correct_extension) - - new_url = change_extension(previous_url, correct_extension) - - if is_external - new_url = "/#{new_url}" - source = Discourse.store.get_path_for_upload(upload) - destination = change_extension(source, correct_extension) - - Discourse.store.copy_file(previous_url, source, destination) - - upload.update!( - original_filename: new_filename, - url: new_url, - extension: correct_extension, - ) - - DbHelper.remap(previous_url, upload.url) - Discourse.store.remove_file(previous_url, source) - else - destination = change_extension(source, correct_extension) - FileUtils.copy(source, destination) - - upload.update!( - original_filename: new_filename, - url: new_url, - extension: correct_extension, - ) - - DbHelper.remap(previous_url, upload.url) - - tombstone_path = source.sub("/uploads/", "/uploads/tombstone/") - FileUtils.mkdir_p(File.dirname(tombstone_path)) - - FileUtils.move(source, tombstone_path) - end - end - end - rescue => e - STDERR.puts "Skipping upload: failed to correct extension on upload id: #{upload.id} #{current_extension} => #{correct_extension}" - STDERR.puts e - end - - private - - def self.change_extension(path, extension) - pathname = Pathname.new(path) - dirname = pathname.dirname.to_s != "." ? "#{pathname.dirname}/" : "" - basename = File.basename(path, File.extname(path)) - "#{dirname}#{basename}.#{extension}" - end -end