def perform(self, *args, **kwargs): import shutil import os import click from craftbuildtools.utils import get_filename built_projects = kwargs.pop("built_projects") files_folder = kwargs.pop("files_folder") copied_files = [] for project in built_projects: pom_info = project.get_pom_info() output_jar_path = os.path.join(project.target_directory, pom_info["output_jar"]) if not os.path.exists(output_jar_path): click.echo("Unable to find %s for project %s" % (pom_info["output_jar"], project.name)) continue new_file_path = os.path.join(files_folder, pom_info["output_jar"]) shutil.copyfile(output_jar_path, new_file_path) copied_files.append(new_file_path) click.echo( "Copied %s files to %s [%s]" % (len(copied_files), files_folder, ",".join(get_filename(name) for name in copied_files)) ) return copied_files
def perform(self, *args, **kwargs): import shutil import os import click from craftbuildtools.utils import get_filename built_projects = kwargs.pop('built_projects') files_folder = kwargs.pop('files_folder') copied_files = [] for project in built_projects: pom_info = project.get_pom_info() output_jar_path = os.path.join(project.target_directory, pom_info['output_jar']) if not os.path.exists(output_jar_path): click.echo("Unable to find %s for project %s" % (pom_info['output_jar'], project.name)) continue new_file_path = os.path.join(files_folder, pom_info['output_jar']) shutil.copyfile(output_jar_path, new_file_path) copied_files.append(new_file_path) click.echo("Copied %s files to %s [%s]" % ( len(copied_files), files_folder, ",".join(get_filename(name) for name in copied_files) )) return copied_files
def perform(self, *args, **kwargs): from craftbuildtools.utils import ChangeDir, get_filename templates_folder = kwargs.pop("templatefolder") template = kwargs.pop("template") git_repo = kwargs.pop("git_clone_repo") plugin_manager = kwargs.pop('plugin_manager') if not os.path.exists(templates_folder): os.makedirs(templates_folder) new_git_repo = click.prompt("Would you like to add a new template?", default=False, type=click.BOOL) if new_git_repo: git_repo = click.prompt("Enter the URL For your git-repo to use as a template", type=click.STRING) # If there was a git repository included in the arguments, then # Attempt to clone this done! if git_repo is not None: # Enter the Templates Folder! with ChangeDir(templates_folder): # Get the name of the folder, from the git repo. cloned_folder_name = get_filename(git_repo) # If the git repository doesn't exist then we need to clone it doen. if not os.path.exists(os.path.join(templates_folder, cloned_folder_name)): try: from sh import git except: click.echo( "You must have git installed on your machine in order to perform a clone. Aborting. Install git and try again") exit() return git.clone(git_repo) if not os.path.exists(os.path.join(templates_folder, cloned_folder_name).replace(".git", "")): logger.error("Unable to find cloned repo %s at expected location %s" % ( cloned_folder_name, os.path.join(templates_folder, cloned_folder_name))) exit() return else: click.echo("Git Repo %s already exists at %s" % (cloned_folder_name, templates_folder)) available_templates = [] for file in os.listdir(templates_folder): file = os.path.join(templates_folder, file) logger.debug("First Loop File: %s" % file) if os.path.isdir(file): logger.debug("%s is dir" % file) available_templates.append(file) # If there's no template or git_repo available, and no projects # In the available templates folder. if len(available_templates) == 0: click.echo("A template is required in order to create a project.") wants_to_clone = click.prompt("Would you like to clone a git repo for your template?", default=True, type=click.BOOL) try: from sh import git except: click.echo( "You must have git installed on your machine in order to perform a clone. Aborting. Install git and try again") exit() return if not wants_to_clone: clone_commons_templates = click.prompt("Would you like to clone the default repositories?", default=True, type=click.BOOL) if not clone_commons_templates: logger.error("You must have atleast one available template in-order to create a project") exit() return with ChangeDir(templates_folder): # TODO Read list of default repositories from config on git. Or something. cloned = 0 if not os.path.exists(os.path.join(templates_folder, "cookiecutter-commons-bukkitplugin")): logger.info("Cloning CookieCutter Template: Commons (BukkitPlugin)") git.clone('https://github.com/TechnicalBro/cookiecutter-commons-bukkitplugin.git') cloned += 1 if not os.path.exists(os.path.join(templates_folder, "cookiecutter-commons-minigame")): logger.info("Cloning CookieCutter Template: Commons (MiniGame)") git.clone("https://github.com/TechnicalBro/cookiecutter-commons-minigame.git") cloned += 1 if not os.path.exists(os.path.join(templates_folder, "cookiecutter-bukkit-maven")): logger.info("Cloning CookieCutter Template: Bukkit Plugin") git.clone("https://github.com/TechnicalBro/cookiecutter-bukkit-maven.git") cloned += 1 if cloned > 0: logger.info("Finished Cloning available repositories.") else: git_repo = click.prompt("Enter the URL of the git repo to clone", type=click.STRING) with ChangeDir(templates_folder): # Get the name of the folder, from the git repo. cloned_folder_name = get_filename(git_repo) # If the git repository doesn't exist then we need to clone it doen. if not os.path.exists(os.path.join(templates_folder, cloned_folder_name)): git.clone(git_repo) if not os.path.exists(os.path.join(templates_folder, cloned_folder_name).replace(".git", "")): logger.error("Unable to find cloned repo %s at expected location %s" % ( cloned_folder_name, os.path.join(templates_folder, cloned_folder_name))) exit() return else: click.echo("Git Repo %s already exists at %s" % (cloned_folder_name, templates_folder)) available_templates = [] logger.debug("Templates Folder is %s" % templates_folder) for file in os.listdir(templates_folder): file = os.path.join(templates_folder, file) if os.path.isdir(file): available_templates.append(file) logger.debug("Available Template: %s" % file) else: logger.debug("%s is not a directory" % file) if len(available_templates) == 0: click.echo("There's no available templates to choose from. Exiting") exit() templates_data = {} plugin_manager.register(directory=templates_folder, skip_types=OperationPlugin, override=True) if not plugin_manager.has_plugin(plugin_type=TemplateRenderPlugin): logger.error( "Unable to locate template rendering plugins in Plugin Manager. Assure your template has a script to render it by.") exit() return template_plugins = plugin_manager.get_plugins(plugin_type=TemplateRenderPlugin) for plugin in template_plugins: templates_data[plugin.template_name] = { 'plugin': plugin, 'folder': os.path.dirname(inspect.getfile(plugin.__class__)) } logger.debug("Template Data map is: %s" % str(templates_data)) project_type = template if project_type not in template_plugins: project_type_prompt_text = "Which Template Would you like to Render? Choose from ({})".format( ', '.join(templates_data.keys())) project_type = click.prompt(project_type_prompt_text, type=click.Choice(templates_data.keys())) template_plugin = templates_data[project_type]['plugin'] template_plugin.perform(directory=templates_data[project_type]['folder'])
def perform(self, *args, **kwargs): from craftbuildtools.utils import ChangeDir, get_filename templates_folder = kwargs.pop("templatefolder") template = kwargs.pop("template") git_repo = kwargs.pop("git_clone_repo") plugin_manager = kwargs.pop('plugin_manager') if not os.path.exists(templates_folder): os.makedirs(templates_folder) new_git_repo = click.prompt("Would you like to add a new template?", default=False, type=click.BOOL) if new_git_repo: git_repo = click.prompt( "Enter the URL For your git-repo to use as a template", type=click.STRING) # If there was a git repository included in the arguments, then # Attempt to clone this done! if git_repo is not None: # Enter the Templates Folder! with ChangeDir(templates_folder): # Get the name of the folder, from the git repo. cloned_folder_name = get_filename(git_repo) # If the git repository doesn't exist then we need to clone it doen. if not os.path.exists( os.path.join(templates_folder, cloned_folder_name)): try: from sh import git except: click.echo( "You must have git installed on your machine in order to perform a clone. Aborting. Install git and try again" ) exit() return git.clone(git_repo) if not os.path.exists( os.path.join(templates_folder, cloned_folder_name).replace( ".git", "")): logger.error( "Unable to find cloned repo %s at expected location %s" % (cloned_folder_name, os.path.join(templates_folder, cloned_folder_name))) exit() return else: click.echo("Git Repo %s already exists at %s" % (cloned_folder_name, templates_folder)) available_templates = [] for file in os.listdir(templates_folder): file = os.path.join(templates_folder, file) logger.debug("First Loop File: %s" % file) if os.path.isdir(file): logger.debug("%s is dir" % file) available_templates.append(file) # If there's no template or git_repo available, and no projects # In the available templates folder. if len(available_templates) == 0: click.echo("A template is required in order to create a project.") wants_to_clone = click.prompt( "Would you like to clone a git repo for your template?", default=True, type=click.BOOL) try: from sh import git except: click.echo( "You must have git installed on your machine in order to perform a clone. Aborting. Install git and try again" ) exit() return if not wants_to_clone: clone_commons_templates = click.prompt( "Would you like to clone the default repositories?", default=True, type=click.BOOL) if not clone_commons_templates: logger.error( "You must have atleast one available template in-order to create a project" ) exit() return with ChangeDir(templates_folder): # TODO Read list of default repositories from config on git. Or something. cloned = 0 if not os.path.exists( os.path.join(templates_folder, "cookiecutter-commons-bukkitplugin")): logger.info( "Cloning CookieCutter Template: Commons (BukkitPlugin)" ) git.clone( 'https://github.com/TechnicalBro/cookiecutter-commons-bukkitplugin.git' ) cloned += 1 if not os.path.exists( os.path.join(templates_folder, "cookiecutter-commons-minigame")): logger.info( "Cloning CookieCutter Template: Commons (MiniGame)" ) git.clone( "https://github.com/TechnicalBro/cookiecutter-commons-minigame.git" ) cloned += 1 if not os.path.exists( os.path.join(templates_folder, "cookiecutter-bukkit-maven")): logger.info( "Cloning CookieCutter Template: Bukkit Plugin") git.clone( "https://github.com/TechnicalBro/cookiecutter-bukkit-maven.git" ) cloned += 1 if cloned > 0: logger.info("Finished Cloning available repositories.") else: git_repo = click.prompt( "Enter the URL of the git repo to clone", type=click.STRING) with ChangeDir(templates_folder): # Get the name of the folder, from the git repo. cloned_folder_name = get_filename(git_repo) # If the git repository doesn't exist then we need to clone it doen. if not os.path.exists( os.path.join(templates_folder, cloned_folder_name)): git.clone(git_repo) if not os.path.exists( os.path.join(templates_folder, cloned_folder_name).replace( ".git", "")): logger.error( "Unable to find cloned repo %s at expected location %s" % (cloned_folder_name, os.path.join(templates_folder, cloned_folder_name))) exit() return else: click.echo("Git Repo %s already exists at %s" % (cloned_folder_name, templates_folder)) available_templates = [] logger.debug("Templates Folder is %s" % templates_folder) for file in os.listdir(templates_folder): file = os.path.join(templates_folder, file) if os.path.isdir(file): available_templates.append(file) logger.debug("Available Template: %s" % file) else: logger.debug("%s is not a directory" % file) if len(available_templates) == 0: click.echo( "There's no available templates to choose from. Exiting") exit() templates_data = {} plugin_manager.register(directory=templates_folder, skip_types=OperationPlugin, override=True) if not plugin_manager.has_plugin(plugin_type=TemplateRenderPlugin): logger.error( "Unable to locate template rendering plugins in Plugin Manager. Assure your template has a script to render it by." ) exit() return template_plugins = plugin_manager.get_plugins( plugin_type=TemplateRenderPlugin) for plugin in template_plugins: templates_data[plugin.template_name] = { 'plugin': plugin, 'folder': os.path.dirname(inspect.getfile(plugin.__class__)) } logger.debug("Template Data map is: %s" % str(templates_data)) project_type = template if project_type not in template_plugins: project_type_prompt_text = "Which Template Would you like to Render? Choose from ({})".format( ', '.join(list(templates_data.keys()))) project_type = click.prompt(project_type_prompt_text, type=click.Choice( list(templates_data.keys()))) template_plugin = templates_data[project_type]['plugin'] template_plugin.perform( directory=templates_data[project_type]['folder'])