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.
This commit is contained in:
Alan Guo Xiang Tan 2025-05-30 14:11:55 +08:00 committed by GitHub
parent da0b303568
commit ecc64e3925
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 0 additions and 93 deletions

View File

@ -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

View File

@ -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

View File

@ -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