Disable file versioning for files that match the filter.

This commit is contained in:
COLA@Redmine.local 2017-02-02 19:53:11 +01:00
parent a57031957a
commit 0f288ba881
4 changed files with 27 additions and 5 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 @@ 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

@ -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