Ejemplo n.º 1
0
    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')
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
    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])
Ejemplo n.º 4
0
    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])
Ejemplo n.º 5
0
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)