diff --git a/app/views/settings/_dmsf_settings.html.erb b/app/views/settings/_dmsf_settings.html.erb index 54aad1ca..c1cffd99 100644 --- a/app/views/settings/_dmsf_settings.html.erb +++ b/app/views/settings/_dmsf_settings.html.erb @@ -179,6 +179,14 @@ <%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)

+

+ <%= content_tag(:label, l(:label_webdav_disable_versioning)) %> + <%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], :size => 50 %> + + <%= l(:note_webdav_disable_versioning) %>
+ <%= l(:label_default) %>: ^\~\$|\.tmp$ +
+


diff --git a/config/locales/en.yml b/config/locales/en.yml index 8ea935f2..1afbf2fa 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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 \ No newline at end of file + 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. diff --git a/init.rb b/init.rb index f134ea8e..3daf39ce 100644 --- a/init.rb +++ b/init.rb @@ -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 diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 1256af8c..beaa2162 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -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