Fix #3235: Replacements deleting files currently in use.
This commit is contained in:
@@ -67,9 +67,11 @@ class Post < ApplicationRecord
|
|||||||
module ClassMethods
|
module ClassMethods
|
||||||
def delete_files(post_id, file_path, large_file_path, preview_file_path, force: false)
|
def delete_files(post_id, file_path, large_file_path, preview_file_path, force: false)
|
||||||
unless force
|
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.")
|
raise DeletionError.new("Files still in use; skipping deletion.")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -202,6 +202,27 @@ class PostReplacementTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
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
|
context "a post with an uploaded file" do
|
||||||
should "work" do
|
should "work" do
|
||||||
upload_file("#{Rails.root}/test/files/test.png", "test.png") do |file|
|
upload_file("#{Rails.root}/test/files/test.png", "test.png") do |file|
|
||||||
|
|||||||
Reference in New Issue
Block a user