Esempio n. 1
0
def generate_repository_archive_filename(
    tool_shed_url,
    name,
    owner,
    changeset_revision,
    file_type,
    export_repository_dependencies=False,
    use_tmp_archive_dir=False,
):
    tool_shed = clean_tool_shed_url(tool_shed_url)
    file_type_str = suc.get_file_type_str(changeset_revision, file_type)
    if export_repository_dependencies:
        repositories_archive_filename = "%s_%s_%s_%s_%s" % (
            CAPSULE_WITH_DEPENDENCIES_FILENAME,
            tool_shed,
            name,
            owner,
            file_type_str,
        )
    else:
        repositories_archive_filename = "%s_%s_%s_%s_%s" % (CAPSULE_FILENAME, tool_shed, name, owner, file_type_str)
    if use_tmp_archive_dir:
        tmp_archive_dir = tempfile.mkdtemp(prefix="tmp-toolshed-arcdir")
        repositories_archive_filename = os.path.join(tmp_archive_dir, repositories_archive_filename)
    return repositories_archive_filename
Esempio n. 2
0
def generate_repository_archive(trans, work_dir, tool_shed_url, repository, changeset_revision, file_type):
    file_type_str = suc.get_file_type_str(changeset_revision, file_type)
    file_name = "%s-%s" % (repository.name, file_type_str)
    return_code, error_message = archive_repository_revision(trans, ui, repository, work_dir, changeset_revision)
    if return_code:
        return None, error_message
    repository_archive_name = os.path.join(work_dir, file_name)
    # Create a compressed tar archive that will contain only valid files and possibly altered dependency definition files.
    repository_archive = tarfile.open(repository_archive_name, "w:%s" % file_type)
    for root, dirs, files in os.walk(work_dir):
        if root.find(".hg") < 0 and root.find("hgrc") < 0:
            for dir in dirs:
                if dir in commit_util.UNDESIRABLE_DIRS:
                    dirs.remove(dir)
            for name in files:
                name = str(name)
                if str(name) in commit_util.UNDESIRABLE_FILES:
                    continue
                full_path = os.path.join(root, name)
                relative_path = full_path.replace(work_dir, "").lstrip("/")
                # See if we have a repository dependencies defined.
                if name == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
                    # Eliminate the toolshed, and changeset_revision attributes from all <repository> tags.
                    altered, root_elem, error_message = commit_util.handle_repository_dependencies_definition(
                        trans, full_path, unpopulate=True
                    )
                    if error_message:
                        return None, error_message
                    if altered:
                        tmp_filename = xml_util.create_and_write_tmp_file(root_elem, use_indent=True)
                        shutil.move(tmp_filename, full_path)
                elif name == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
                    # Eliminate the toolshed, and changeset_revision attributes from all <repository> tags.
                    altered, root_elem, error_message = commit_util.handle_tool_dependencies_definition(
                        trans, full_path, unpopulate=True
                    )
                    if error_message:
                        return None, error_message
                    if altered:
                        tmp_filename = xml_util.create_and_write_tmp_file(root_elem, use_indent=True)
                        shutil.move(tmp_filename, full_path)
                repository_archive.add(full_path, arcname=relative_path)
    repository_archive.close()
    return repository_archive, error_message