On Mon, 10 Feb 2014 20:22:36 -0500
Chris Reffett <creff...@gentoo.org> wrote:

> This patch adds a --output-style option to repoman, which gives the
> user a choice of output formats for the repoman checks. Choices are
> "default" (current style) and "column" (a greppable format), but it
> should be easy to add more. Fixes bug 481584.
> 
> v2: Fix docstring to be complete and in the standard format, make use
> of default choices in --output-style wrt comments by antarus and
> dol-sen ---
>  bin/repoman              | 15 ++++++++++++++-
>  pym/repoman/utilities.py | 44
> ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58
> insertions(+), 1 deletion(-)
> 
> diff --git a/bin/repoman b/bin/repoman
> index 3504b6b..c7a1c4c 100755
> --- a/bin/repoman
> +++ b/bin/repoman
> @@ -144,9 +144,16 @@ def ParseArgs(argv, qahelp):
>               'scan' : 'Scan directory tree for QA issues'
>       }
>  
> +     output_choices = {
> +             'default' : 'The normal output format',
> +             'column' : 'Columnar output suitable for use with
> grep'
> +     }
> +
>       mode_keys = list(modes)
>       mode_keys.sort()
>  
> +     output_keys = sorted(output_choices)
> +
>       parser = ArgumentParser(usage="repoman [options] [mode]",
>               description="Modes: %s" % " | ".join(mode_keys),
>               epilog="For more help consult the man page.")
> @@ -228,6 +235,9 @@ def ParseArgs(argv, qahelp):
>       parser.add_argument('--without-mask', dest='without_mask',
> action='store_true', default=False, help='behave as if no
> package.mask entries exist (not allowed with commit mode)') 
> +     parser.add_argument('--output-style', dest='output_style',
> choices=output_keys,
> +             help='select output type', default='default')
> +
>       parser.add_argument('--mode', dest='mode', choices=mode_keys,
>               help='specify which mode repoman will run in
> (default=full)') 
> @@ -2422,7 +2432,10 @@ console_writer.style_listener =
> style_file.new_styles 
>  f = formatter.AbstractFormatter(console_writer)
>  
> -utilities.format_qa_output(f, stats, fails, dofull, dofail, options,
> qawarnings) +if options.output_style == 'column':
> +     utilities.format_qa_output_column(f, stats, fails, dofull,
> dofail, options, qawarnings) +else:
> +     utilities.format_qa_output(f, stats, fails, dofull, dofail,
> options, qawarnings) 
>  style_file.flush()
>  del console_writer, f, style_file
> diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
> index 3ec3a4a..aec61fe 100644
> --- a/pym/repoman/utilities.py
> +++ b/pym/repoman/utilities.py
> @@ -330,6 +330,50 @@ def format_qa_output(formatter, stats, fails,
> dofull, dofail, options, qawarning formatter.add_line_break()
>  
>  
> +def format_qa_output_column(formatter, stats, fails, dofull, dofail,
> options, qawarnings):
> +     """Helper function that formats output in a
> machine-parseable column format +
> +     @param formatter: an instance of Formatter
> +     @type formatter: Formatter
> +     @param path: dict of qa status items
> +     @type path: dict
> +     @param fails: dict of qa status failures
> +     @type fails: dict
> +     @param dofull: Whether to print full results or a summary
> +     @type dofull: boolean
> +     @param dofail: Whether failure was hard or soft
> +     @type dofail: boolean
> +     @param options: The command-line options provided to repoman
> +     @type options: Namespace
> +     @param qawarnings: the set of warning types
> +     @type qawarnings: set
> +     @return: None (modifies formatter)
> +     """
> +     full = options.mode == 'full'
> +     for category, number in stats.items():
> +             # we only want key value pairs where value > 0
> +             if number < 1:
> +                     continue
> +
> +             formatter.add_literal_data("NumberOf " + category +
> " ")
> +             if category in qawarnings:
> +                     formatter.push_style("WARN")
> +             else:
> +                     formatter.push_style("BAD")
> +             formatter.add_literal_data("%s" % number)
> +             formatter.pop_style()
> +             formatter.add_line_break()
> +             if not dofull:
> +                     if not full and dofail and category in
> qawarnings:
> +                             # warnings are considered noise when
> there are failures
> +                             continue
> +                     fails_list = fails[category]
> +                     if not full and len(fails_list) > 12:
> +                             fails_list = fails_list[:12]
> +                     for failure in fails_list:
> +                             formatter.add_literal_data(category
> + " " + failure)
> +                             formatter.add_line_break()
> +
>  def editor_is_executable(editor):
>       """
>       Given an EDITOR string, validate that it refers to

 looks good to me.

-- 
Brian Dolbec <dolsen>


Reply via email to