diff --git a/app/models/communication/website/with_git_repository.rb b/app/models/communication/website/with_git_repository.rb index 02dde76903b9a3171d4efd1b72f3f38d8ab9fb47..c5a12ff05c84b9c14cd64d969b7d96b151be765f 100644 --- a/app/models/communication/website/with_git_repository.rb +++ b/app/models/communication/website/with_git_repository.rb @@ -13,6 +13,16 @@ module Communication::Website::WithGitRepository @git_repository ||= Git::Repository.new self end + # Synchronisation optimale d'objet indirect + def sync_indirect_object_with_git(indirect_object) + return unless git_repository.valid? + indirect_object.direct_sources.each do |direct_source| + add_direct_source_to_sync(direct_source) + end + git_repository.sync! + end + handle_asynchronously :sync_indirect_object_with_git, queue: 'default' + # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencies_syncable def destroy_obsolete_git_files website_git_files.find_each do |git_file| @@ -37,4 +47,15 @@ module Communication::Website::WithGitRepository # Clean website if about was present and changed OR a language was removed (saved_change_to_about_id? && about_id_before_last_save.present?) || language_was_removed end + + protected + + def add_direct_source_to_sync(direct_source) + return unless direct_source.syncable? + Communication::Website::GitFile.sync self, direct_source + direct_source.recursive_dependencies(syncable_only: true).each do |object| + Communication::Website::GitFile.sync self, object + end + # On ne synchronise pas les références de l'objet direct, car on ne le modifie pas lui. + end end diff --git a/app/models/concerns/as_indirect_object.rb b/app/models/concerns/as_indirect_object.rb index 58859b131206621c37347f3129045ebce9c180d8..460dfd8d4de948b806e895f06c75a84e53b51df5 100644 --- a/app/models/concerns/as_indirect_object.rb +++ b/app/models/concerns/as_indirect_object.rb @@ -63,7 +63,9 @@ module AsIndirectObject def connect_and_sync_direct_sources direct_sources.each do |direct_source| direct_source.website.connect self, direct_source - direct_source.sync_with_git + end + websites.each do |website| + website.sync_indirect_object_with_git self end end end \ No newline at end of file