def __init__(self, working_dir, cloud_dir, tmp_dir, file_info_csv_file, reinit=False, password=None, compression_level=compression.COMPRESSION_LEVEL_NORMAL, encryption_method=compression.ENCRYPTION_ZIP_CRYPTO): self.working_dir = working_dir self.cloud_dir = cloud_dir self.tmp_dir = tmp_dir self.file_info_csv_file = file_info_csv_file self.password = password self.encryption_method = encryption_method self.compression_level = compression_level self.compression_key = lambda x: util.path_for_sorting( compression.get_original_filename(x.path))
def merge(dir_changes1, dir_changes2, parent_dir_changes_new1=None, parent_dir_changes_old1=None, parent_dir_changes_new2=None, parent_dir_changes_old2=None, parent_dir_changes_conflict=None): base_dir = ( dir_changes1.base_dir() if dir_changes1 else dir_changes2.base_dir()) dc_new1 = change_entry.DirChanges(base_dir, change_entry.CONTENT_STATUS_UNSPECIFIED, parent_dir_changes=parent_dir_changes_new1) dc_old1 = change_entry.DirChanges(base_dir, change_entry.CONTENT_STATUS_UNSPECIFIED, parent_dir_changes=parent_dir_changes_old1) dc_new2 = change_entry.DirChanges(base_dir, change_entry.CONTENT_STATUS_UNSPECIFIED, parent_dir_changes=parent_dir_changes_new2) dc_old2 = change_entry.DirChanges(base_dir, change_entry.CONTENT_STATUS_UNSPECIFIED, parent_dir_changes=parent_dir_changes_old2) dc_conflict = change_entry.DirChanges( base_dir, change_entry.CONTENT_STATUS_UNSPECIFIED, parent_dir_changes=parent_dir_changes_conflict) for c1, c2 in util.merge_two_iterators( iter(dir_changes1.changes() if dir_changes1 else []), iter(dir_changes2.changes() if dir_changes2 else []), key_func=lambda x: util.path_for_sorting(x.path)): if _is_file_change(c1) and _is_file_change(c2): _merge_both_files(c1, c2, dc_new1, dc_old1, dc_new2, dc_old2, dc_conflict) else: _merge_both_dirs(c1, c2, dir_changes1.dir_changes(c1.path) if c1 else None, dir_changes2.dir_changes(c2.path) if c2 else None, dc_new1, dc_old1, dc_new2, dc_old2, dc_conflict) return dc_new1, dc_old1, dc_new2, dc_old2, dc_conflict
def path_for_sorting(self): return util.path_for_sorting(self.path)