From dac08d6522270d4ad312efabdba02aff121af1e3 Mon Sep 17 00:00:00 2001 From: Jon Bernard Date: Mon, 4 Jan 2016 13:18:32 -0500 Subject: Add verbose status option --- dotfiles.py | 66 +++++++++++++++++++++++++++++++++++++++++++------------------ setup.py | 2 +- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/dotfiles.py b/dotfiles.py index 04b1394..460f5f3 100644 --- a/dotfiles.py +++ b/dotfiles.py @@ -119,7 +119,7 @@ def add(repo, files): @cli.command() -@click.option('-v', '--verbose', is_flag=True, help='Show dotfile state.') +@click.option('-v', '--verbose', is_flag=True, help='Enable verbose output.') @pass_repo def list(repo, verbose): """Show the contents of a repository.""" @@ -142,33 +142,61 @@ def remove(repo, files): Dotfile(filename, repo.target(filename)).remove() +def show_status(dotfiles, state_info, color): + for dotfile in dotfiles: + try: + msg = '%s %s' % (state_info[dotfile.state]['char'], dotfile) + fg = state_info[dotfile.state]['color'] if color else None + click.secho(msg, fg=fg) + except KeyError: + continue + + +def show_verbose_status(dotfiles, state_info, color): + errors = [d for d in dotfiles if d.state == 'error'] + conflicts = [d for d in dotfiles if d.state == 'conflict'] + missing = [d for d in dotfiles if d.state == 'missing'] + + def _show(dotfiles, state): + for dotfile in dotfiles: + click.secho(' %s: %s' % (state, dotfile), + fg=state_info[state]['color'] if color else None) + + if errors: + click.echo('Dotfiles with no target:\n') + _show(errors, 'error') + click.echo() + + if conflicts: + click.echo('Repository and home directory files are different:\n') + _show(conflicts, 'conflict') + click.echo() + + if missing: + click.echo('Missing symlink in home directory:\n') + _show(missing, 'missing') + click.echo() + + @cli.command() -@click.option('-c', '--color', is_flag=True, help='Enable color.') -@click.option('-s', '--short', is_flag=True, help='Show terse output.') +@click.option('-c', '--color', is_flag=True, help='Enable color.') +@click.option('-v', '--verbose', is_flag=True, help='Enable verbose output.') @pass_repo -def status(repo, color, short): - """Show all dotifles in a non-OK state.""" +def status(repo, color, verbose): + """Show all dotfiles in a non-OK state.""" - states = { + state_info = { 'error': {'char': 'E', 'color': 'red'}, 'conflict': {'char': '!', 'color': 'magenta'}, 'missing': {'char': '?', 'color': 'yellow'}, } - if not short: - click.echo('long output not yet implemeted, using --short for now') - dotfiles = repo.contents() - for dotfile in dotfiles: - try: - state_str = states[dotfile.state]['char'] - color_str = states[dotfile.state]['color'] - if color: - click.secho('%s %s' % (state_str, dotfile), fg=color_str) - else: - click.echo('%s %s' % (state_str, dotfile)) - except KeyError: - continue + + if verbose: + show_verbose_status(dotfiles, state_info, color) + else: + show_status(dotfiles, state_info, color) @cli.command() diff --git a/setup.py b/setup.py index 8df4968..466b10e 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ setup( open('LICENSE.rst').read() + '\n\n' + open('HISTORY.rst').read()), license='ISC', - py_modules=['dotifles'], + py_modules=['dotfiles'], install_requires=[ 'click', 'py', -- cgit v1.2.3