def cmd_analyze(filenames, *, fmt=None, iter_filenames=None, relroot=fsutil.USE_CWD, track_progress=None, verbosity=None, _analyze=_analyze, formats=FORMATS, **kwargs): verbosity = verbosity if verbosity is not None else 3 try: do_fmt = formats[fmt] except KeyError: raise ValueError(f'unsupported fmt {fmt!r}') filenames, relroot = fsutil.fix_filenames(filenames, relroot=relroot) filenames = filter_filenames(filenames, iter_filenames, relroot) if track_progress: filenames = track_progress(filenames) logger.info('analyzing files...') analyzed = _analyze(filenames, **kwargs) analyzed.fix_filenames(relroot, normalize=False) decls = filter_forward(analyzed, markpublic=True) for line in do_fmt(decls): print(line)
def cmd_analyze(filenames, *, fmt=None, iter_filenames=None, verbosity=None, _analyze=_analyze, formats=FORMATS, **kwargs ): verbosity = verbosity if verbosity is not None else 3 try: do_fmt = formats[fmt] except KeyError: raise ValueError(f'unsupported fmt {fmt!r}') filenames = filter_filenames(filenames, iter_filenames) if verbosity == 2: def iter_filenames(filenames=filenames): marks = iter_marks() for filename in filenames: print(next(marks), end='') yield filename filenames = iter_filenames() elif verbosity > 2: def iter_filenames(filenames=filenames): for filename in filenames: print(f'<{filename}>') yield filename filenames = iter_filenames() logger.info('analyzing...') analyzed = _analyze(filenames, **kwargs) for line in do_fmt(analyzed): print(line)
def cmd_check(filenames, *, checks=None, ignored=None, fmt=None, relroot=None, failfast=False, iter_filenames=None, verbosity=VERBOSITY, _analyze=_analyze, _CHECKS=CHECKS, **kwargs ): if not checks: checks = _CHECKS elif isinstance(checks, str): checks = [checks] checks = [_CHECKS[c] if isinstance(c, str) else c for c in checks] printer = Printer(verbosity) (handle_failure, handle_after, div ) = _get_check_handlers(fmt, printer, verbosity) filenames = filter_filenames(filenames, iter_filenames) logger.info('analyzing...') analyzed = _analyze(filenames, **kwargs) if relroot: analyzed.fix_filenames(relroot) logger.info('checking...') numfailed = 0 for data, failure in _check_all(analyzed, checks, failfast=failfast): if data is None: printer.info('stopping after one failure') break if div is not None and numfailed > 0: printer.info(div) numfailed += 1 handle_failure(failure, data) handle_after() printer.info('-------------------------') logger.info(f'total failures: {numfailed}') logger.info('done checking') if numfailed > 0: sys.exit(numfailed)
def cmd_check(filenames, *, checks=None, ignored=None, fmt=None, failfast=False, iter_filenames=None, relroot=fsutil.USE_CWD, track_progress=None, verbosity=VERBOSITY, _analyze=_analyze, _CHECKS=CHECKS, **kwargs): if not checks: checks = _CHECKS elif isinstance(checks, str): checks = [checks] checks = [_CHECKS[c] if isinstance(c, str) else c for c in checks] printer = Printer(verbosity) (handle_failure, handle_after, div) = _get_check_handlers(fmt, printer, verbosity) filenames, relroot = fsutil.fix_filenames(filenames, relroot=relroot) filenames = filter_filenames(filenames, iter_filenames, relroot) if track_progress: filenames = track_progress(filenames) logger.info('analyzing files...') analyzed = _analyze(filenames, **kwargs) analyzed.fix_filenames(relroot, normalize=False) decls = filter_forward(analyzed, markpublic=True) logger.info('checking analysis results...') failed = [] for data, failure in _check_all(decls, checks, failfast=failfast): if data is None: printer.info('stopping after one failure') break if div is not None and len(failed) > 0: printer.info(div) failed.append(data) handle_failure(failure, data) handle_after() printer.info('-------------------------') logger.info(f'total failures: {len(failed)}') logger.info('done checking') if fmt == 'summary': print('Categorized by storage:') print() from .match import group_by_storage grouped = group_by_storage(failed, ignore_non_match=False) for group, decls in grouped.items(): print() print(group) for decl in decls: print(' ', _fmt_one_summary(decl)) print(f'subtotal: {len(decls)}') if len(failed) > 0: sys.exit(len(failed))