]> source.dussan.org Git - redmine.git/commitdiff
Introduces an additional check before removing a deduplicated file (#34479).
authorGo MAEDA <maeda@farend.jp>
Wed, 17 Mar 2021 13:46:18 +0000 (13:46 +0000)
committerGo MAEDA <maeda@farend.jp>
Wed, 17 Mar 2021 13:46:18 +0000 (13:46 +0000)
Patch by Jens Krämer.

git-svn-id: http://svn.redmine.org/redmine/trunk@20812 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/attachment.rb

index 7bce5ded6c49c8a1c97c41dbaa35d1adaf4892fb..3ffb1b51d9fddb8ce3d55f451871223b392814c1 100644 (file)
@@ -496,16 +496,15 @@ class Attachment < ActiveRecord::Base
   private
 
   def reuse_existing_file_if_possible
-    original_diskfile = nil
+    original_diskfile = diskfile
+    original_filename = disk_filename
     reused = with_lock do
       if existing = Attachment
                       .where(digest: self.digest, filesize: self.filesize)
-                      .where('id <> ? and disk_filename <> ?',
-                             self.id, self.disk_filename)
+                      .where.not(disk_filename: original_filename)
                       .order(:id)
                       .last
         existing.with_lock do
-          original_diskfile = self.diskfile
           existing_diskfile = existing.diskfile
           if File.readable?(original_diskfile) &&
             File.readable?(existing_diskfile) &&
@@ -516,7 +515,7 @@ class Attachment < ActiveRecord::Base
         end
       end
     end
-    if reused
+    if reused && Attachment.where(disk_filename: original_filename).none?
       File.delete(original_diskfile)
     end
   rescue ActiveRecord::StatementInvalid, ActiveRecord::RecordNotFound