diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index 2e200716..6504120c 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -141,7 +141,6 @@ class DmsfFilesController < ApplicationController revision.size = upload.size revision.disk_filename = revision.new_storage_filename revision.mime_type = upload.mime_type - revision.digest = upload.digest revision.file.attach( io: File.open(upload.tempfile_path), filename: revision.disk_filename, @@ -153,7 +152,6 @@ class DmsfFilesController < ApplicationController revision.size = last_revision.size revision.disk_filename = last_revision.disk_filename revision.mime_type = last_revision.mime_type - revision.digest = last_revision.digest end # Custom fields revision.copy_custom_field_values(params[:dmsf_file_revision][:custom_field_values], last_revision) diff --git a/app/controllers/dmsf_upload_controller.rb b/app/controllers/dmsf_upload_controller.rb index 97159471..022f5d77 100644 --- a/app/controllers/dmsf_upload_controller.rb +++ b/app/controllers/dmsf_upload_controller.rb @@ -49,7 +49,6 @@ class DmsfUploadController < ApplicationController @uploads.push upload params[:committed_files][key][:disk_filename] = upload.disk_filename - params[:committed_files][key][:digest] = upload.digest params[:committed_files][key][:tempfile_path] = upload.tempfile_path end commit_files if params[:committed_files].present? diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index 21757c7f..550da8d0 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -70,7 +70,6 @@ module DmsfUploadHelper end new_revision.mime_type = committed_file[:mime_type] new_revision.size = committed_file[:size] - new_revision.digest = committed_file[:digest] # Custom fields new_revision.copy_custom_field_values(committed_file[:custom_field_values]) # Need to save file first to generate id for it in case of creation. diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 88576dad..0bf731ab 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -114,6 +114,10 @@ class DmsfFileRevision < ApplicationRecord shared_file end + def checksum + file.blob.checksum + end + def visible?(_user = nil) deleted == STATUS_ACTIVE end @@ -237,7 +241,6 @@ class DmsfFileRevision < ApplicationRecord new_revision.source_revision = self new_revision.user = User.current new_revision.name = name - new_revision.digest = digest new_revision end @@ -322,7 +325,6 @@ class DmsfFileRevision < ApplicationRecord content_type: mime_type, identify: false ) - self.digest = file.blob.checksum end # Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields @@ -360,20 +362,6 @@ class DmsfFileRevision < ApplicationRecord format2 end - def create_digest - self.digest = Digest::SHA256.file(path).hexdigest - rescue StandardError => e - Rails.logger.error e.message - self.digest = 0 - end - - # Returns either MD5 or SHA256 depending on the way self.digest was computed - def digest_type - return nil if digest.blank? - - digest.size < 64 ? 'MD5' : 'SHA256' - end - def tooltip text = description.presence || +'' if comment.present? diff --git a/app/models/dmsf_upload.rb b/app/models/dmsf_upload.rb index f1818340..fe136be5 100644 --- a/app/models/dmsf_upload.rb +++ b/app/models/dmsf_upload.rb @@ -20,7 +20,7 @@ # Upload class DmsfUpload attr_accessor :name, :disk_filename, :mime_type, :title, :description, :comment, :major_version, :minor_version, - :patch_version, :locked, :workflow, :custom_values, :tempfile_path, :digest, :token + :patch_version, :locked, :workflow, :custom_values, :tempfile_path, :token attr_reader :size def disk_file @@ -36,8 +36,7 @@ class DmsfUpload original_filename: a.filename, comment: uploaded_file[:description], tempfile_path: a.diskfile, - token: uploaded_file[:token], - digest: a.digest + token: uploaded_file[:token] } DmsfUpload.new project, folder, uploaded else diff --git a/app/views/dmsf_files/show.html.erb b/app/views/dmsf_files/show.html.erb index f8138ba2..8b80290d 100644 --- a/app/views/dmsf_files/show.html.erb +++ b/app/views/dmsf_files/show.html.erb @@ -135,10 +135,10 @@ <%= content_tag :div, l(:label_mime), class: 'label' %> <%= content_tag :div, revision.mime_type, class: 'value' %> - <% if revision.digest.present? %> + <% if revision.checksum.present? %>
<%= content_tag :div, l(:field_digest), class: 'label' %> - <%= content_tag :div, "#{revision.digest_type}: #{revision.digest}", class: 'value wiki' %> + <%= content_tag :div, revision.checksum, class: 'value wiki' %>
<% end %> <%= render 'dmsf/custom_fields', object: revision %> diff --git a/app/views/dmsf_upload/_upload_file.html.erb b/app/views/dmsf_upload/_upload_file.html.erb index 4ed818e9..73ec5c8f 100644 --- a/app/views/dmsf_upload/_upload_file.html.erb +++ b/app/views/dmsf_upload/_upload_file.html.erb @@ -20,7 +20,6 @@
<%= hidden_field_tag "committed_files[#{i}][disk_filename]", upload.disk_filename %> <%= hidden_field_tag "committed_files[#{i}][token]", upload.token %> - <%= hidden_field_tag "committed_files[#{i}][digest]", upload.digest %> <%= hidden_field_tag "committed_files[#{i}][size]", upload.size %>
diff --git a/app/views/dmsf_upload/upload_file.html.erb b/app/views/dmsf_upload/upload_file.html.erb index 54673ff2..824209ac 100644 --- a/app/views/dmsf_upload/upload_file.html.erb +++ b/app/views/dmsf_upload/upload_file.html.erb @@ -22,6 +22,5 @@ "content_type": "<%= @tempfile.content_type.gsub('"', '').html_safe %>", "disk_filename": "<%= @disk_filename.html_safe %>", "tempfile_path": "<%= @tempfile_path.html_safe %>", - "digest": "<%= @digest.html_safe %>", "token": "<%= @token.html_safe %>" } diff --git a/db/migrate/20160421150501_add_digest_to_revision.rb b/db/migrate/20160421150501_add_digest_to_revision.rb index e309720a..43ae957a 100644 --- a/db/migrate/20160421150501_add_digest_to_revision.rb +++ b/db/migrate/20160421150501_add_digest_to_revision.rb @@ -22,4 +22,8 @@ class AddDigestToRevision < ActiveRecord::Migration[4.2] def up add_column :dmsf_file_revisions, :digest, :string, limit: 40, default: '', null: false end + + def down + remove_column :dmsf_file_revisions, :digest + end end diff --git a/db/migrate/20171027124101_change_revision_digest_limit_to_64.rb b/db/migrate/20171027124101_change_revision_digest_limit_to_64.rb index 4e4104c0..acc107d4 100644 --- a/db/migrate/20171027124101_change_revision_digest_limit_to_64.rb +++ b/db/migrate/20171027124101_change_revision_digest_limit_to_64.rb @@ -25,7 +25,7 @@ class ChangeRevisionDigestLimitTo64 < ActiveRecord::Migration[4.2] def down # Mysql2::Error: Data too long for column 'digest' - # Recalculation of checksums for all revisions is technically possible but costs are to high. + # Recalculation of checksums for all revisions is technically possible but costs are too high. # change_column :dmsf_file_revisions, :digest, :string, limit: 40 end end diff --git a/db/migrate/20251128131001_remove_digest_from_revision.rb b/db/migrate/20251128131001_remove_digest_from_revision.rb new file mode 100644 index 00000000..d418308d --- /dev/null +++ b/db/migrate/20251128131001_remove_digest_from_revision.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# Redmine plugin for Document Management System "Features" +# +# Karel Pičman +# +# This file is part of Redmine DMSF plugin. +# +# Redmine DMSF plugin is free software: you can redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# Redmine DMSF plugin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even +# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with Redmine DMSF plugin. If not, see +# . + +# Add column +class RemoveDigestFromRevision < ActiveRecord::Migration[7.0] + def up + remove_column :dmsf_file_revisions, :digest + end + + def down + add_column :dmsf_file_revisions, :digest, :string, limit: 64, default: '', null: false + # Recalculation of checksums for all revisions is technically possible but costs are too high. + end +end diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb index c7da282c..086f8b02 100644 --- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb +++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb @@ -174,7 +174,6 @@ module RedmineDmsf uploaded_file[:size] = upload.size uploaded_file[:mime_type] = upload.mime_type uploaded_file[:tempfile_path] = upload.tempfile_path - uploaded_file[:digest] = upload.digest if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present? uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i end diff --git a/test/fixtures/dmsf_file_revisions.yml b/test/fixtures/dmsf_file_revisions.yml index 163e0d99..81d12a66 100644 --- a/test/fixtures/dmsf_file_revisions.yml +++ b/test/fixtures/dmsf_file_revisions.yml @@ -18,7 +18,6 @@ dmsf_file_revisions_001: user_id: 1 dmsf_workflow_assigned_by_user_id: 1 dmsf_workflow_started_by_user_id: 1 - digest: '202cb962ac59075b964b07152d234b70' created_at: 2017-04-18 14:52:27 +02:00 #revision for file on non-enabled project @@ -41,7 +40,6 @@ dmsf_file_revisions_002: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '202cb962ac59075b964b07152d234b70' created_at: 2017-04-18 14:52:27 +02:00 #revision for deleted file on dmsf-enabled project @@ -64,7 +62,6 @@ dmsf_file_revisions_003: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '202cb962ac59075b964b07152d234b70' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_004: @@ -86,30 +83,7 @@ dmsf_file_revisions_004: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '202cb962ac59075b964b07152d234b70' created_at: 2017-04-18 14:52:27 +02:00 - -#dmsf_file_revisions_005: -# id: 5 -# dmsf_file_id: 1 -# source_dmsf_file_revision_id: NULL -# name: 'test5.txt' -# disk_filename: 'test5.txt' -# size: 4 -# mime_type: 'application/vnd.oasis.opendocument.text' -# title: 'Test file' -# description: NULL -# workflow: 1 # DmsfWorkflow::STATE_WAITING_FOR_APPROVAL -# minor_version: 1 -# major_version: 1 -# comment: 'Wrong mime type in order to have Edit content menu item' -# deleted: 0 -# deleted_by_user_id: NULL -# user_id: 1 -# dmsf_workflow_assigned_by_user_id: NULL -# dmsf_workflow_started_by_user_id: NULL -# digest: '81dc9bdb52d04dc20036dbd8313ed055' -# created_at: 2017-04-18 14:52:28 +02:00 dmsf_file_revisions_006: id: 6 @@ -130,7 +104,6 @@ dmsf_file_revisions_006: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '8ae50031bb862c4a69f2bab5cd1f2051' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_007: @@ -152,7 +125,6 @@ dmsf_file_revisions_007: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '5376a8cee7e15c8aa1023d27f3209720' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_008: @@ -195,7 +167,6 @@ dmsf_file_revisions_009: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_010: @@ -217,7 +188,6 @@ dmsf_file_revisions_010: user_id: 1 dmsf_workflow_assigned_by_user_id: 1 dmsf_workflow_started_by_user_id: 1 - digest: '81dc9bdb52d04dc20036dbd8313ed055' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_011: @@ -239,7 +209,6 @@ dmsf_file_revisions_011: user_id: 1 dmsf_workflow_assigned_by_user_id: 1 dmsf_workflow_started_by_user_id: 1 - digest: '81dc9bdb52d04dc20036dbd8313ed055' created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_012: @@ -261,7 +230,6 @@ dmsf_file_revisions_012: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '81dc9bdb52d04dc20036dbd8313ed055' created_at: 2022-02-03 13:39:27 +02:00 dmsf_file_revisions_013: @@ -283,5 +251,4 @@ dmsf_file_revisions_013: user_id: 1 dmsf_workflow_assigned_by_user_id: NULL dmsf_workflow_started_by_user_id: NULL - digest: '89a6d0ea9aafc21a978152f3e4977812d5d7d623505749471f256a90fc7c5f72' created_at: 2017-04-01 08:54:00 +02:00 \ No newline at end of file diff --git a/test/unit/dmsf_file_revision_test.rb b/test/unit/dmsf_file_revision_test.rb index 6af5138e..369d01db 100644 --- a/test/unit/dmsf_file_revision_test.rb +++ b/test/unit/dmsf_file_revision_test.rb @@ -70,11 +70,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest assert_nil DmsfFileRevision.find_by(id: @revision13.id) end - def test_digest_type - # Old type MD5 - assert_equal 'MD5', @revision1.digest_type - end - def test_new_storage_filename # Create a file. f = DmsfFile.new @@ -337,4 +332,8 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest assert_nil @revision2.dmsf_workflow_started_by_user_id assert_nil @revision2.dmsf_workflow_started_at end + + def test_checksum + assert_equal @revision1.checksum, @revision1.file.blob.checksum + end end