SL:Webdav:File.pm->store: ungeänderte Dokumente nicht doppelt speichern.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 25 Apr 2022 14:34:51 +0000 (16:34 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 25 Apr 2022 14:43:33 +0000 (16:43 +0200)
Einfacher Größenvergleich mit letzter Version.

SL/Webdav/File.pm
SL/Webdav/Object.pm

index 313c9ff..54af37a 100644 (file)
@@ -58,6 +58,19 @@ sub store {
       $params{new_version} = 1;
     }
 
+    # Do not create a new version of the document if file size of last version is the same.
+    if ($params{new_version}) {
+      my $last_file_size = $last->size;
+      my $new_file_size;
+      if ($params{file}) {
+        croak 'No valid file' unless -f $params{file};
+        $new_file_size  = (stat($params{file}))[7];
+      } else {
+        $new_file_size  = length(${ $params{data} });
+      }
+      $params{new_version} = 0 if $last_file_size == $new_file_size;
+    }
+
     if ($params{new_version}) {
       my $new_version  = $self->webdav->version_scheme->next_version($last);
       my $sep          = $self->webdav->version_scheme->separator;
@@ -153,6 +166,9 @@ C<file> and C<data> are exclusive.
 If param C<new_version> is set, force a new version, even if the versioning
 scheme would keep the old one.
 
+No new version is stored if the file or data size is euqal to the size of
+the last stored version.
+
 =back
 
 =head1 SEE ALSO
index 8779d09..e4ece79 100644 (file)
@@ -42,6 +42,10 @@ sub full_filedescriptor {
   File::Spec->catfile($self->webdav->webdav_path, $self->filename);
 }
 
+sub size {
+  ($_[0]->stat)[7];
+}
+
 sub atime {
   DateTime->from_epoch(epoch => ($_[0]->stat)[8]);
 }
@@ -132,6 +136,10 @@ Returns the version string.
 
 Returns the extension.
 
+=item C<size>
+
+wrapped stat[7]
+
 =item C<atime>
 
 L<DateTime> wrapped stat[8]