Merge pull request #645 from carlolars/630_DisableVersioning

Disable versioning #630
This commit is contained in:
Karel Picman 2017-02-03 12:58:08 +01:00 committed by GitHub
commit 9e124bfa84
17 changed files with 118 additions and 17 deletions

View File

@ -179,6 +179,14 @@
<%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)
</em>
</p>
<p>
<%= content_tag(:label, l(:label_webdav_disable_versioning)) %>
<%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], :size => 50 %>
<em class="info">
<%= l(:note_webdav_disable_versioning) %> <br/>
<%= l(:label_default) %>: ^\~\$|\.tmp$
</em>
</p>
<hr/>
<em class="info">

View File

@ -347,4 +347,7 @@ cs:
note_webdav_ignore: Regulární výraz pro názvy souborů, které budou ignorovány při volání PUT.
label_document_url: Url
label_last_revision_id: Revize
label_last_revision_id: Revize
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -344,4 +344,7 @@ de:
text_memcached_servers: Only a single server is supported, if empty then caching is disabled. After changing this, the application must be restarted!
label_webdav_ignore: Ignored files patterns
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ en:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ es:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ fr:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ it: # Italian strings thx 2 Matteo Arceci!
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ ja:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ pl:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ pt-BR:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ ru:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ sl:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ zh-TW:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -347,4 +347,7 @@ zh:
note_webdav_ignore: A regular expresion with filenames to ignore by PUT requests.
label_document_url: Url
label_last_revision_id: Revision
label_last_revision_id: Revision
label_webdav_disable_versioning: No versioning files patterns
note_webdav_disable_versioning: A regular expression that disables versioning for matching files.

View File

@ -49,7 +49,8 @@ Redmine::Plugin.register :redmine_dmsf do
'dmsf_global_title_format' => '',
'dmsf_columns' => %w(title size modified version workflow author),
'dmsf_memcached_servers' => '',
'dmsf_webdav_ignore' => '^(\._|\.DS_Store$|Thumbs.db$)'
'dmsf_webdav_ignore' => '^(\._|\.DS_Store$|Thumbs.db$)',
'dmsf_webdav_disable_versioning' => '^\~\$|\.tmp$'
}
menu :project_menu, :dmsf, { :controller => 'dmsf', :action => 'show' }, :caption => :menu_dmsf, :before => :documents, :param => :id

View File

@ -534,6 +534,7 @@ module RedmineDmsf
def put(request, response)
raise BadRequest if collection?
raise Forbidden unless User.current.admin? || User.current.allowed_to?(:file_manipulation, project)
# Ignore file name patterns given in the plugin settings
pattern = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore']
pattern = /^(\._|\.DS_Store$|Thumbs.db$)/ if pattern.blank?
@ -542,17 +543,24 @@ module RedmineDmsf
return NoContent
end
new_revision = DmsfFileRevision.new
reuse_revision = false
# Disable versioning for file name patterns given in the plugin settings.
pattern = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning']
if !pattern.blank? && basename.match(pattern)
Rails.logger.info "Versioning disabled for #{basename}"
reuse_revision = true
else
reuse_revision = false
end
if exist? # We're over-writing something, so ultimately a new revision
f = file
last_revision = file.last_revision
if last_revision.size == 0
if last_revision.size == 0 || reuse_revision
new_revision = last_revision
new_revision.minor_version -= 1
reuse_revision = true
else
new_revision = DmsfFileRevision.new
new_revision.source_revision = last_revision
if last_revision
new_revision.major_version = last_revision.major_version
@ -568,8 +576,10 @@ module RedmineDmsf
f.name = basename
f.dmsf_folder = parent.folder
f.notification = !Setting.plugin_redmine_dmsf['dmsf_default_notifications'].blank?
new_revision = DmsfFileRevision.new
new_revision.minor_version = 0
new_revision.major_version = 0
reuse_revision = false
end
new_revision.dmsf_file = f

View File

@ -224,4 +224,47 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
end
end
def test_put_non_versioned_files
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_manipulation
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '1234', @admin.merge!({:content_type => :text})
assert_response :success
file1 = DmsfFile.find_file_by_name @project1, nil, 'file1.tmp'
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '5678', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '9ABC', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '1234', @admin.merge!({:content_type => :text})
assert_response :success
file2 = DmsfFile.find_file_by_name @project1, nil, '~$file2.txt'
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '5678', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '9ABC', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$'
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", '1234', @admin.merge!({:content_type => :text})
assert_response :success
file2 = DmsfFile.find_file_by_name @project1, nil, 'file3.dump'
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", '5678', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", '9ABC', @admin.merge!({:content_type => :text})
assert_response :success # 201 - Created
end
end
end