X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b3fad38bb4fd356e5ce924e792be7f4113d1c746..d5745d536d013a6731e0e6a872abe34d71f0995e:/services/api/app/models/collection.rb diff --git a/services/api/app/models/collection.rb b/services/api/app/models/collection.rb index 3637f34e10..c2c60ec70e 100644 --- a/services/api/app/models/collection.rb +++ b/services/api/app/models/collection.rb @@ -37,6 +37,8 @@ class Collection < ArvadosModel validate :protected_managed_properties_updates, on: :update after_validation :set_file_count_and_total_size before_save :set_file_names + before_update :preserve_version_exclusive_updates_leave_modified_at_alone, + if: Proc.new { |col| col.changes.keys.sort == ['modified_at', 'updated_at', 'preserve_version'].sort } around_update :manage_versioning, unless: :is_past_version? api_accessible :user, extend: :common do |t| @@ -62,6 +64,8 @@ class Collection < ArvadosModel t.add :file_size_total end + UNLOGGED_CHANGES = ['preserve_version', 'updated_at'] + after_initialize do @signatures_checked = false @computed_pdh_for_manifest_text = false @@ -274,7 +278,7 @@ class Collection < ArvadosModel # Restore requested changes on the current version changes.keys.each do |attr| - if attr == 'preserve_version' && changes[attr].last == false + if attr == 'preserve_version' && changes[attr].last == false && !should_preserve_version next # Ignore false assignment, once true it'll be true until next version end self.attributes = {attr => changes[attr].last} @@ -286,7 +290,6 @@ class Collection < ArvadosModel if should_preserve_version self.version += 1 - self.preserve_version = false end yield @@ -305,6 +308,10 @@ class Collection < ArvadosModel end end + def preserve_version_exclusive_updates_leave_modified_at_alone + self.modified_at = self.modified_at_was + end + def syncable_updates updates = {} if self.changes.any? @@ -359,6 +366,7 @@ class Collection < ArvadosModel idle_threshold = Rails.configuration.Collections.PreserveVersionIfIdle if !self.preserve_version_was && + !self.preserve_version && (idle_threshold < 0 || (idle_threshold > 0 && self.modified_at_was > db_current_time-idle_threshold.seconds)) return false @@ -742,4 +750,8 @@ class Collection < ArvadosModel self.current_version_uuid ||= self.uuid true end + + def log_update + super unless (saved_changes.keys - UNLOGGED_CHANGES).empty? + end end