Re: [gentoo-portage-dev] [PATCH] Add --output-style option to repoman

2014-02-10 Thread Brian Dolbec
On Mon, 10 Feb 2014 17:57:26 -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.
 ---
  bin/repoman  | 18 +-
  pym/repoman/utilities.py | 38 ++
  2 files changed, 55 insertions(+), 1 deletion(-)
 
 diff --git a/bin/repoman b/bin/repoman
 index 3504b6b..957ee08 100755
 --- a/bin/repoman
 +++ b/bin/repoman
 @@ -144,9 +144,17 @@ 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 = list(output_choices)
 + output_keys.sort
 +
   parser = ArgumentParser(usage=repoman [options] [mode],
   description=Modes: %s %  | .join(mode_keys),
   epilog=For more help consult the man page.)
 @@ -228,6 +236,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')


Why not set the default right here?

+   parser.add_argument('--output-style', dest='output_style',
 choices=output_keys, default='default',
+   help='select output type')

 +
   parser.add_argument('--mode', dest='mode', choices=mode_keys,
   help='specify which mode repoman will run in
 (default=full)') 
 @@ -256,6 +267,8 @@ def ParseArgs(argv, qahelp):
   if opts.mode == 'ci':
   opts.mode = 'commit'  # backwards compat shortcut
  
 + if not opts.output_style:
 + opts.output_style = 'default' #default to the
standard output type

delete ^^^  not needed if you set the default as above
 
# Use the verbosity and quiet options to fiddle
 with the loglevel appropriately for val in range(opts.verbosity):
   logger = logging.getLogger()
 @@ -2422,7 +2435,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..713f208 100644
 --- a/pym/repoman/utilities.py
 +++ b/pym/repoman/utilities.py
 @@ -330,6 +330,44 @@ 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 +
 + Args:
 + formatter - a subclass of Formatter
 + stats - a dict of qa status items
 + fails - a dict of qa status failures
 + dofull - boolean to print full results or a summary
 + dofail - boolean to decide if failure was hard or
 soft +
 + Returns:
 + None (modifies formatter)
 + 


I thought we had a doc around that stated the format for docstrings.
I recall it being a different format that the above parameter descriptions.



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

Re: [gentoo-portage-dev] [PATCH] Add --output-style option to repoman

2014-02-10 Thread Alec Warner
On Mon, Feb 10, 2014 at 2:57 PM, 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.
 ---
  bin/repoman  | 18 +-
  pym/repoman/utilities.py | 38 ++
  2 files changed, 55 insertions(+), 1 deletion(-)

 diff --git a/bin/repoman b/bin/repoman
 index 3504b6b..957ee08 100755
 --- a/bin/repoman
 +++ b/bin/repoman
 @@ -144,9 +144,17 @@ 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)

?


 +   output_keys = list(output_choices)
 +   output_keys.sort
 +
 parser = ArgumentParser(usage=repoman [options] [mode],
 description=Modes: %s %  | .join(mode_keys),
 epilog=For more help consult the man page.)
 @@ -228,6 +236,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')
 +
 parser.add_argument('--mode', dest='mode', choices=mode_keys,
 help='specify which mode repoman will run in
 (default=full)')

 @@ -256,6 +267,8 @@ def ParseArgs(argv, qahelp):
 if opts.mode == 'ci':
 opts.mode = 'commit'  # backwards compat shortcut

 +   if not opts.output_style:
 +   opts.output_style = 'default' #default to the standard
 output type
 # Use the verbosity and quiet options to fiddle with the loglevel
 appropriately
 for val in range(opts.verbosity):
 logger = logging.getLogger()
 @@ -2422,7 +2435,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..713f208 100644
 --- a/pym/repoman/utilities.py
 +++ b/pym/repoman/utilities.py
 @@ -330,6 +330,44 @@ 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
 +
 +   Args:
 +   formatter - a subclass of Formatter
 +   stats - a dict of qa status items
 +   fails - a dict of qa status failures
 +   dofull - boolean to print full results or a summary
 +   dofail - boolean to decide if failure was hard or soft


missing options and qawarnings ?


 +
 +   Returns:
 +   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 

[gentoo-portage-dev] [PATCH v2] Add --output-style option to repoman

2014-02-10 Thread Chris Reffett
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
-- 
1.8.5.3




Re: [gentoo-portage-dev] [PATCH v2] Add --output-style option to repoman

2014-02-10 Thread Brian Dolbec
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