Fix #3235: Replacements deleting files currently in use.

This commit is contained in:
evazion
2017-07-24 23:04:01 -05:00
parent 11ef460db0
commit b53371b698
2 changed files with 25 additions and 2 deletions

View File

@@ -67,9 +67,11 @@ class Post < ApplicationRecord
module ClassMethods
def delete_files(post_id, file_path, large_file_path, preview_file_path, force: false)
unless force
post = Post.find(post_id)
# XXX should pass in the md5 instead of parsing it.
preview_file_path =~ %r!/data/preview/(?:test\.)?([a-z0-9]{32})\.jpg\z!
md5 = $1
if post.file_path == file_path || post.large_file_path == large_file_path || post.preview_file_path == preview_file_path
if Post.where(md5: md5).exists?
raise DeletionError.new("Files still in use; skipping deletion.")
end
end

View File

@@ -202,6 +202,27 @@ class PostReplacementTest < ActiveSupport::TestCase
end
end
context "two posts that have had their files swapped" do
should "not delete the still active files" do
@post1 = FactoryGirl.create(:post)
@post2 = FactoryGirl.create(:post)
# swap the images between @post1 and @post2.
@post1.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247350")
@post2.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364")
@post2.replace!(replacement_url: "https://www.google.com/intl/en_ALL/images/logo.gif")
@post1.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364")
@post2.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247350")
Timecop.travel(Time.now + PostReplacement::DELETION_GRACE_PERIOD + 1.day) do
Delayed::Worker.new.work_off
end
assert(File.exists?(@post1.file_path))
assert(File.exists?(@post2.file_path))
end
end
context "a post with an uploaded file" do
should "work" do
upload_file("#{Rails.root}/test/files/test.png", "test.png") do |file|