sync_manager, stop sync on unmerged

This commit is contained in:
Amber 2024-10-17 16:56:16 +02:00
parent 8106b17ee4
commit 6cd99b3e7f
2 changed files with 62 additions and 9 deletions

View File

@ -346,6 +346,8 @@ class Manager():
local_snap_diff = self.get_local_snap_diff() local_snap_diff = self.get_local_snap_diff()
changes = local_snap_diff.get('added') or [] changes = local_snap_diff.get('added') or []
dones = []
for node in added: for node in added:
node_name = node['name'] node_name = node['name']
last_hash = node.get('last_hash') last_hash = node.get('last_hash')
@ -359,6 +361,10 @@ class Manager():
raise Exception('This case must be managed!!! remote node appeared but in the local tree there was not') raise Exception('This case must be managed!!! remote node appeared but in the local tree there was not')
self.copy_node_to_remote(node) self.copy_node_to_remote(node)
## mark node as synched with remote,
dones.append(node)
return dones
def sync_changed(self, changes=None): def sync_changed(self, changes=None):
@ -368,6 +374,8 @@ class Manager():
unmerged = [] unmerged = []
dones = []
for node in changes: for node in changes:
node_name = node['name'] node_name = node['name']
last_hash = node['last_hash'] last_hash = node['last_hash']
@ -383,12 +391,16 @@ class Manager():
unmerged.append(node) unmerged.append(node)
continue continue
dones.added(node)
print(f'You can proceed to push {node_name} file it is not changed from the last version') print(f'You can proceed to push {node_name} file it is not changed from the last version')
self.copy_node_to_remote(node) self.copy_node_to_remote(node)
if unmerged: if unmerged:
self.store_unmerged_diff(unmerged) self.store_unmerged_diff(unmerged)
return dones
def sync(self): def sync(self):
''' '''
sync: sync:
@ -398,19 +410,54 @@ class Manager():
if there are not differencies simply do necessary actions to sync if there are not differencies simply do necessary actions to sync
if there is differences put the file diff in a specific folder if there is differences put the file diff in a specific folder
''' '''
# self.init_rh_agent() ## check if there are unmerged files
# last_tree = self.load_local_hash()
# current_tree = self.compute_local_hash()
local_snap_diff = self.get_local_snap_diff()
# rhagent = self.init_rh_agent()
# agent = self.get_agent()
changes = local_snap_diff.get('changed') or []
self.sync_changed(changes=changes)
added = local_snap_diff.get('added') or []
self.sync_added(added=added)
unmerged_path = self.get_unmerged_path()
if os.listdir(unmerged_path):
print('You have this unmerged file(s):\n')
self.show_conflicts()
return return
local_snap_diff = self.get_local_snap_diff()
local_tree = self.load_local_hash()
changes = local_snap_diff.get('changed') or []
changed_done = self.sync_changed(changes=changes)
for node in changed_done:
local_tree = self.update_local_hash('changed', node, tree=local_tree)
added = local_snap_diff.get('added') or []
added_done = self.sync_added(added=added)
for node in added_done:
local_tree = self.update_local_hash('add', node, tree=local_tree)
return local_tree
def update_local_hash(self,action, node_changed, tree=None):
if not tree:
tree = self.load_local_hash()
rel_path_list = node_changed['rel_path'].split('/')
rel_path_list = [r for r in rel_path_list if r]
node_name = node_changed['name']
cur_hash = node_changed['cur_hash']
subtree = tree
for kpath in rel_path_list:
if kpath == '.': continue
subtree = subtree[kpath]
if action == 'add':
subtree[node_name] = {}
try:
subtree[node_name].update(cur_hash)
except Exception as e:
print(f'Exception: {e}, {cur_hash}')
## if key is an hash pass and modify the key
subtree[node_name] = cur_hash
return tree

View File

@ -8,4 +8,10 @@ def test_init_sync():
m = sync_manager.Manager(local_path='/home/luca/sharednotes_dev', remote_path='notanamber@myvps:/home/notanamber/notes_dev') m = sync_manager.Manager(local_path='/home/luca/sharednotes_dev', remote_path='notanamber@myvps:/home/notanamber/notes_dev')
m.init_sync() m.init_sync()
def test_sync():
'''
notanamber@e65109ddf4:~/notes_dev$ rm -rf spartiti_sepu/added_local/
notanamber@e65109ddf4:~/notes_dev$ rm -rf spartiti_sepu/added_remote/added_file.txt
'''
m = get_test_manager()
m.sync()