Skip to content
Snippets Groups Projects
Unverified Commit 94008478 authored by Sébastien Gaya's avatar Sébastien Gaya Committed by GitHub
Browse files

Opti sync indirect objects (#1924)


* tentative d'opti

* up

* bundle

* cc

---------

Co-authored-by: default avatarpabois <pierreandre.boissinot@noesya.coop>
parent 2dd11299
No related branches found
No related tags found
No related merge requests found
......@@ -289,6 +289,9 @@ GEM
terminal-table (>= 1.5.1)
globalid (1.2.1)
activesupport (>= 6.1)
google-protobuf (4.27.0-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.27.0-x86_64-darwin)
bigdecimal
rake (>= 13)
......@@ -407,6 +410,8 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.3)
nokogiri (1.16.5-arm64-darwin)
racc (~> 1.4)
nokogiri (1.16.5-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.16.5-x86_64-linux)
......@@ -643,6 +648,7 @@ GEM
zlib (2.1.1)
PLATFORMS
arm64-darwin-23
x86_64-darwin-23
x86_64-linux
......
......@@ -35,9 +35,14 @@ module Communication::Website::WithGitRepository
# Synchronisation optimale d'objet indirect
def sync_indirect_object_with_git(indirect_object)
all_dependencies = []
indirect_object.direct_sources.each do |direct_source|
add_direct_source_to_sync(direct_source)
all_dependencies = add_direct_source_to_sync(direct_source, array: all_dependencies)
end
all_dependencies.each do |dependency|
Communication::Website::GitFile.sync self, dependency
end
git_repository.sync!
end
......@@ -90,15 +95,18 @@ module Communication::Website::WithGitRepository
protected
def add_direct_source_to_sync(direct_source)
def add_direct_source_to_sync(direct_source, array: [])
# Ne pas traiter les sources d'autres sites
return unless direct_source.website.id == self.id
return array unless direct_source.website.id == self.id
# Ne pas traiter les sources non synchronisables
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
return array unless direct_source.syncable?
# Ne pas traiter si la source directe est déjà dans le tableau de dépendances
return array if array.include?(direct_source)
array << direct_source
# On passe le tableau de dépendances à la méthode recursive_dependencies
# pour qu'il soit capable d'early return en cas de doublon
array += direct_source.recursive_dependencies(array: array, syncable_only: true)
# On ne synchronise pas les références de l'objet direct, car on ne le modifie pas lui.
array
end
end
......@@ -10,6 +10,7 @@ class Git::Repository
end
def add_git_file(git_file)
return if git_files.include?(git_file)
puts "Adding #{git_file.path}"
if git_files.empty?
# The first file gives the commit name
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment