From fd31c8d0a20de41b7b2b701f737d74dd0c318350 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 8 Feb 2016 23:40:34 +0100 Subject: Readme, more functions & output, python standards - Fixed some python issues, complied to some standards - Filled in the readme - Added remove & upgrade to clmgr - Renamed clone to install in clmgr - More output for clmgr --- cleantools/__init__.py | 0 cleantools/clim.py | 8 ++++---- cleantools/clmgr.py | 46 +++++++++++++++++++++++++++++++++++++++------- 3 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 cleantools/__init__.py (limited to 'cleantools') diff --git a/cleantools/__init__.py b/cleantools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cleantools/clim.py b/cleantools/clim.py index 6c227bf..ac4461c 100755 --- a/cleantools/clim.py +++ b/cleantools/clim.py @@ -4,16 +4,16 @@ import subprocess from setuptools_scm import get_version -import cleantools.clmgr -import cleantools.settings +from . import clmgr +from . import settings def main(): parser = argparse.ArgumentParser(description='Improved clm') parser.add_argument('--version', action='version', version=get_version()) parser.add_argument('-W', '--with', metavar='lib', nargs='*', dest='libs', help='Add libraries installed with clmgr') - parser.add_argument('-clm', metavar='arg', type=str, nargs='*', - help='Extra clm arguments', required=False) + parser.add_argument('-clm', metavar='arg', type=str, required=False, + nargs=argparse.REMAINDER, help='Extra clm arguments') args = parser.parse_args() diff --git a/cleantools/clmgr.py b/cleantools/clmgr.py index ec5764d..563f60c 100755 --- a/cleantools/clmgr.py +++ b/cleantools/clmgr.py @@ -4,14 +4,27 @@ import os import click from git import Repo from setuptools_scm import get_version +import shutil -import cleantools.settings +from . import settings + +__all__ = ['Library', 'main'] class Library(): """A Clean library""" def __init__(self, path): self.path = Library.get_path(path) + def upgrade(self): + repo = Repo(self.path) + old_sha = repo.head.commit.hexsha + repo.remotes.origin.pull() + new_sha = repo.head.commit.hexsha + return old_sha != new_sha + + def remove(self): + shutil.rmtree(self.path) + @staticmethod def get_path(lib): """Get the path of a library in the installation dir""" @@ -35,6 +48,7 @@ def cli(): @cli.command('version') def cli_version(): + """Print clmgr's version.""" print(get_version()) @cli.command('init') @@ -44,12 +58,12 @@ def cli_init(install_dir): """Initialise the installation directory.""" settings.init(install_dir) -@cli.command('clone') +@cli.command('install') @click.option('--abs/--github', help='Use an absolute path (default: use GitHub)') @click.argument('repo', metavar='repo') @click.argument('local_dir', metavar='local_dir', required=False) -def cli_clone(abs, repo, local_dir): +def cli_install(abs, repo, local_dir): """Clone a repository. If local_dir is empty, the last part of repo will be used. @@ -57,18 +71,36 @@ def cli_clone(abs, repo, local_dir): Examples: \b - clmgr clone username/MyLibrary (local_dir will be MyLibrary) - clmgr clone --abs /var/git/my-library LocalName""" - + clmgr install username/MyLibrary (local_dir will be MyLibrary) + clmgr install --abs /var/git/my-library LocalName""" if local_dir == None: local_dir = list(filter(lambda x: len(x)>0, repo.split('/')))[-1] - click.echo('No local_dir given, using \'%s\'' % local_dir, err=True) + click.secho('No local_dir given, using \'%s\'' % local_dir, + err=True, fg='yellow') if abs: Library.clone(repo, local_dir) else: Library.clone('https://github.com/' + repo, local_dir) + click.secho('%s installed as %s.' % (repo, local_dir), fg='green') + +@cli.command('upgrade') +@click.argument('library') +def cli_upgrade(library): + """Upgrade an installed library.""" + if Library(library).upgrade(): + click.secho('%s upgraded.' % library, fg='green') + else: + click.secho('%s is already the newest version.' % library, fg='yellow') + +@cli.command('remove') +@click.argument('library') +def cli_remove(library): + """Remove an installed library.""" + Library(library).remove() + click.secho('%s removed.' % library, fg='green') + @cli.command('echo') @click.option('--indent/--no-indent', help='Indent hierarchically') @click.argument('what', metavar='what', default='') -- cgit v1.2.3