From 5ae0a65152ab2d25c1f05633aa00682938e2f64f Mon Sep 17 00:00:00 2001 From: "COLA@Redmine.local" Date: Tue, 14 Feb 2017 18:43:11 +0100 Subject: [PATCH] Non-versioned files are destroyed directly when deleted via WebDav. #654 --- lib/redmine_dmsf/webdav/dmsf_resource.rb | 9 ++++----- test/integration/webdav/dmsf_webdav_delete_test.rb | 13 +++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 7a86739b..9e3dd59f 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -231,11 +231,10 @@ module RedmineDmsf def delete if file raise Forbidden unless User.current.admin? || User.current.allowed_to?(:file_delete, project) - if file.name.match(/.\.tmp$/i) - # .tmp files should be destroyed (MsOffice file) - destroy = true - elsif file.name.match(/^\~\$/i) - # Files starting with ~$ should be destroyed (MsOffice file) + + pattern = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] + if !pattern.blank? && basename.match(pattern) + # Files that are not versioned should be destroyed destroy = true elsif file.last_revision.size == 0 # Zero-sized files should be destroyed diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 733b39dd..562533fc 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -212,5 +212,18 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @file1.reload assert !@file1.deleted?, "File #{@file1.name} is expected to exist" end + + def test_non_versioned_file + Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '\.tmp$' + @project1.enable_module! :dmsf + @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_delete + + file = @file1.copy_to_filename(@project1, nil, "delete_test.tmp") + + delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith + # The file should be destroyed + assert_nil DmsfFile.find_file_by_name(@project1, nil, "delete_test.tmp") + end end \ No newline at end of file