def diff_2(self): commit = commit_mgr.load_commit(self.repo_id_2, self.repo_version, self.add_commit) parent = commit_mgr.load_commit(self.repo_id_2, commit.version, self.fst_commit) differ = CommitDiffer(self.repo_id_2, commit.version, parent.root_id, commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = [ 'create_new_file.md', 'create_renamed_file.md', 'create_moved_file.md', 'create_deleted_file.md', 'create_modified_files.md' ] added_folder_names = [ 'create_added_folder', 'create_moved_folder', 'create_deleted_folder', 'create_renamed_folder' ] all_files_names = [f.path for f in added_files] all_folder_names = [f.path for f in added_dirs] for f in added_file_names: self.assertIn('/' + f, all_files_names) for f in added_folder_names: self.assertIn('/' + f, all_folder_names) commit = commit_mgr.load_commit(self.repo_id_2, self.repo_version, self.lst_commit) parent = commit_mgr.load_commit(self.repo_id_2, commit.version, self.add_commit) differ = CommitDiffer(self.repo_id_2, commit.version, parent.root_id, commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() self.assertTrue(len(deleted_files) > 0) self.assertEqual(deleted_files[0].path, '/create_deleted_file.md') self.assertTrue(len(modified_files) > 0) self.assertEqual(modified_files[0].path, '/create_modified_files.md') self.assertTrue(len(renamed_files) > 0) self.assertEqual(renamed_files[0].path, '/create_renamed_file.md') self.assertTrue(len(moved_files) > 0) self.assertEqual(moved_files[0].path, '/create_moved_file.md') self.assertTrue(len(deleted_dirs) > 0) self.assertEqual(deleted_dirs[0].path, '/create_deleted_folder') self.assertTrue(len(renamed_dirs) > 0) self.assertEqual(renamed_dirs[0].path, '/create_renamed_folder') self.assertTrue(len(moved_dirs) > 0) self.assertEqual(moved_dirs[0].path, '/create_moved_folder')
def diff_2(self): commit = commit_mgr.load_commit(self.repo_id_2, self.repo_version, self.add_commit) parent = commit_mgr.load_commit(self.repo_id_2, commit.version, self.fst_commit) differ = CommitDiffer(self.repo_id_2, commit.version, parent.root_id, commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = ['create_new_file.md', 'create_renamed_file.md', 'create_moved_file.md', 'create_deleted_file.md', 'create_modified_files.md'] added_folder_names = ['create_added_folder', 'create_moved_folder', 'create_deleted_folder', 'create_renamed_folder'] all_files_names = [f.path for f in added_files] all_folder_names = [f.path for f in added_dirs] for f in added_file_names: self.assertIn('/' + f, all_files_names) for f in added_folder_names: self.assertIn('/' + f, all_folder_names) commit = commit_mgr.load_commit(self.repo_id_2, self.repo_version, self.lst_commit) parent = commit_mgr.load_commit(self.repo_id_2, commit.version, self.add_commit) differ = CommitDiffer(self.repo_id_2, commit.version, parent.root_id, commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() self.assertTrue(len(deleted_files) > 0) self.assertEquals(deleted_files[0].path, '/create_deleted_file.md') self.assertTrue(len(modified_files) > 0) self.assertEqual(modified_files[0].path, '/create_modified_files.md') self.assertTrue(len(renamed_files) > 0) self.assertEqual(renamed_files[0].path, '/create_renamed_file.md') self.assertTrue(len(moved_files) > 0) self.assertEqual(moved_files[0].path, '/create_moved_file.md') self.assertTrue(len(deleted_dirs) > 0) self.assertEquals(deleted_dirs[0].path, '/create_deleted_folder') self.assertTrue(len(renamed_dirs) > 0) self.assertEquals(renamed_dirs[0].path, '/create_renamed_folder') self.assertTrue(len(moved_dirs) > 0) self.assertEquals(moved_dirs[0].path, '/create_moved_folder')
def test_diff_fold_dirs(self): commit = commit_mgr.load_commit(self.repo_id3, self.repo_version, self.commit_id3) # fold dirs # differ = CommitDiffer(self.repo_id3, commit.version, '0000000000000000000000000000000000000000', commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = ['/file1'] added_dir_names = ['/folder1'] all_files_names = [f.path for f in added_files] all_dirs_names = [f.path for f in added_dirs] self.assertTrue(len(added_file_names) == len(all_files_names)) self.assertTrue(len(added_dir_names) == len(all_dirs_names)) for i in range(len(added_file_names)): self.assertTrue(added_file_names[i] == all_files_names[i]) for i in range(len(added_dir_names)): self.assertTrue(added_dir_names[i] == all_dirs_names[i]) # don't fold dirs # differ = CommitDiffer(self.repo_id3, commit.version, '0000000000000000000000000000000000000000', commit.root_id, True, False) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = ['/file1', '/folder1/folder2/file3'] added_dir_names = [ '/folder1', '/folder1/folder2', '/folder1/folder2/foder3' ] all_files_names = [f.path for f in added_files] all_dirs_names = [f.path for f in added_dirs] self.assertTrue(len(added_file_names) == len(all_files_names)) self.assertTrue(len(added_dir_names) == len(all_dirs_names)) for i in range(len(added_file_names)): self.assertTrue(added_file_names[i] == all_files_names[i]) for i in range(len(added_dir_names)): self.assertTrue(added_dir_names[i] == all_dirs_names[i])
def test_diff_fold_dirs(self): commit = commit_mgr.load_commit(self.repo_id3, self.repo_version, self.commit_id3) # fold dirs # differ = CommitDiffer(self.repo_id3, commit.version, '0000000000000000000000000000000000000000', commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = ['/file1'] added_dir_names = ['/folder1'] all_files_names = [f.path for f in added_files] all_dirs_names = [f.path for f in added_dirs] self.assertTrue(len(added_file_names) == len(all_files_names)) self.assertTrue(len(added_dir_names) == len(all_dirs_names)) for i in range(len(added_file_names)): self.assertTrue(added_file_names[i] == all_files_names[i]) for i in range(len(added_dir_names)): self.assertTrue(added_dir_names[i] == all_dirs_names[i]) # don't fold dirs # differ = CommitDiffer(self.repo_id3, commit.version, '0000000000000000000000000000000000000000', commit.root_id, True, False) added_files, deleted_files, added_dirs, deleted_dirs, modified_files, \ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() added_file_names = ['/file1', '/folder1/folder2/file3'] added_dir_names = ['/folder1', '/folder1/folder2', '/folder1/folder2/foder3'] all_files_names = [f.path for f in added_files] all_dirs_names = [f.path for f in added_dirs] self.assertTrue(len(added_file_names) == len(all_files_names)) self.assertTrue(len(added_dir_names) == len(all_dirs_names)) for i in range(len(added_file_names)): self.assertTrue(added_file_names[i] == all_files_names[i]) for i in range(len(added_dir_names)): self.assertTrue(added_dir_names[i] == all_dirs_names[i])
def RepoUpdateEventHandler(session, msg): elements = msg['content'].split('\t') if len(elements) != 3: logging.warning("got bad message: %s", elements) return repo_id = elements[1] commit_id = elements[2] commit = commit_mgr.load_commit(repo_id, 1, commit_id) if commit is None: commit = commit_mgr.load_commit(repo_id, 0, commit_id) # TODO: maybe handle merge commit. if commit is not None and commit.parent_id and not commit.second_parent_id: parent = commit_mgr.load_commit(repo_id, commit.version, commit.parent_id) if parent is not None: differ = CommitDiffer(repo_id, commit.version, parent.root_id, commit.root_id, True, True) added_files, deleted_files, added_dirs, deleted_dirs, modified_files,\ renamed_files, moved_files, renamed_dirs, moved_dirs = differ.diff() if renamed_files or renamed_dirs or moved_files or moved_dirs: changer = ChangeFilePathHandler() for r_file in renamed_files: changer.update_db_records(repo_id, r_file.path, r_file.new_path, 0) for r_dir in renamed_dirs: changer.update_db_records(repo_id, r_dir.path, r_dir.new_path, 1) for m_file in moved_files: changer.update_db_records(repo_id, m_file.path, m_file.new_path, 0) for m_dir in moved_dirs: changer.update_db_records(repo_id, m_dir.path, m_dir.new_path, 1) changer.close_session() users = [] org_id = get_org_id_by_repo_id(repo_id) if org_id > 0: users = seafile_api.org_get_shared_users_by_repo(org_id, repo_id) owner = seafile_api.get_org_repo_owner(repo_id) else: users = seafile_api.get_shared_users_by_repo(repo_id) owner = seafile_api.get_repo_owner(repo_id) if owner not in users: users = users + [owner] if not users: return time = datetime.datetime.utcfromtimestamp(msg['ctime']) if added_files or deleted_files or added_dirs or deleted_dirs or \ modified_files or renamed_files or moved_files or renamed_dirs or moved_dirs: if appconfig.fh.enabled: records = generate_filehistory_records(added_files, deleted_files, added_dirs, deleted_dirs, modified_files, renamed_files, moved_files, renamed_dirs, moved_dirs, commit, repo_id, parent, time) save_file_histories(session, records) records = generate_activity_records(added_files, deleted_files, added_dirs, deleted_dirs, modified_files, renamed_files, moved_files, renamed_dirs, moved_dirs, commit, repo_id, parent, users, time) save_user_activities(session, records) else: save_repo_rename_activity(session, commit, repo_id, parent, org_id, users, time) # TODO check: catalog entry update # KEEPER logging.info("REPO UPDATED EVENT repo_id: %s" % repo_id) logging.info("Trying to create/update keeper catalog entry for repo_id: %s..." % repo_id) if bool(generate_catalog_entry_by_repo_id(repo_id)): logging.info("Success!") else: logging.error("Something went wrong...") if appconfig.enable_collab_server: send_message_to_collab_server(repo_id)