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
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