diff options
author | Chris Johns <chrisj@rtems.org> | 2015-05-21 21:49:25 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2015-05-21 21:49:25 +1000 |
commit | ce60578b8f6988e6007c169711fed8693e779974 (patch) | |
tree | 84ae8d498f314d7a75a77072532b078e21ce8ac1 | |
parent | 11e1fe1e30df3e4630218a8070557495cab0a1a7 (diff) |
sb: Fix reporting and installing the reports when building.info
Switch the default report to text format.
Fix the report to support the set builder.
-rw-r--r-- | source-builder/sb/reports.py | 65 | ||||
-rw-r--r-- | source-builder/sb/setbuilder.py | 45 |
2 files changed, 70 insertions, 40 deletions
diff --git a/source-builder/sb/reports.py b/source-builder/sb/reports.py index b81fba9..9a20b2e 100644 --- a/source-builder/sb/reports.py +++ b/source-builder/sb/reports.py @@ -247,15 +247,6 @@ class asciidoc_formatter(formatter): class html_formatter(asciidoc_formatter): def __init__(self): super(html_formatter, self).__init__() - try: - import asciidocapi - except: - raise error.general('installation error: no asciidocapi found') - asciidoc_py = _make_path(self.sbpath, options.basepath, 'asciidoc', 'asciidoc.py') - try: - self.asciidoc = asciidocapi.AsciiDocAPI(asciidoc_py) - except: - raise error.general('application error: asciidocapi failed') def format(self): return 'html' @@ -267,7 +258,16 @@ class html_formatter(asciidoc_formatter): import StringIO infile = StringIO.StringIO(self.content) outfile = StringIO.StringIO() - self.asciidoc.execute(infile, outfile) + try: + import asciidocapi + except: + raise error.general('installation error: no asciidocapi found') + asciidoc_py = _make_path(self.sbpath, options.basepath, 'asciidoc', 'asciidoc.py') + try: + asciidoc = asciidocapi.AsciiDocAPI(asciidoc_py) + except: + raise error.general('application error: asciidocapi failed') + asciidoc.execute(infile, outfile) out = outfile.getvalue() infile.close() outfile.close() @@ -440,7 +440,21 @@ class report: """Report the build details about a package given a config file.""" def __init__(self, formatter, _configs, opts, macros = None): - self.formatter = formatter + if type(formatter) == str: + if formatter == 'text': + self.formatter = text_formatter() + elif formatter == 'asciidoc': + self.formatter = asciidoc_formatter() + elif formatter == 'html': + self.formatter = html_formatter() + elif formatter == 'ini': + self.formatter = ini_formatter() + elif formatter == 'xml': + self.formatter = xml_formatter() + else: + raise error.general('invalid format: %s' % (formatter)) + else: + self.formatter = formatter self.configs = _configs self.opts = opts if macros is None: @@ -554,19 +568,20 @@ class report: name = package.name() if len(name) == 0: return - tree['file'] += [_config.file_name()] sources = self.source(macros) patches = self.patch(macros) - if len(sources): - if 'sources' in tree: - tree['sources'] = dict(tree['sources'].items() + sources.items()) - else: - tree['sources'] = sources - if len(patches): - if 'patches' in tree: - tree['patches'] = dict(tree['patches'].items() + patches.items()) - else: - tree['patches'] = patches + if tree is not None: + tree['file'] += [_config.file_name()] + if len(sources): + if 'sources' in tree: + tree['sources'] = dict(tree['sources'].items() + sources.items()) + else: + tree['sources'] = sources + if len(patches): + if 'patches' in tree: + tree['patches'] = dict(tree['patches'].items() + patches.items()) + else: + tree['patches'] = patches self.config_start(name, _config) self.formatter.config(self.bset_nesting + 2, name, _config) self.output_info('Summary', package.get_info('summary'), True) @@ -682,14 +697,16 @@ class report: except IOError, err: raise error.general('writing output file: %s: %s' % (name, err)) - def generate(self, name, tree = None, opts = None, defaults = None): + def generate(self, name, tree = None, opts = None, macros = None): self.bset_nesting += 1 self.buildset_start(name) if tree is None: tree = self.tree if opts is None: opts = self.opts - bset = setbuilder.buildset(name, self.configs, opts, defaults) + if macros is None: + macros = self.macros + bset = setbuilder.buildset(name, self.configs, opts, macros) if name in tree: raise error.general('duplicate build set in tree: %s' % (name)) tree[name] = { 'bset': { }, 'cfg': { 'file': [] } } diff --git a/source-builder/sb/setbuilder.py b/source-builder/sb/setbuilder.py index 8e5d8bb..d46dabd 100644 --- a/source-builder/sb/setbuilder.py +++ b/source-builder/sb/setbuilder.py @@ -90,14 +90,15 @@ class buildset: if not self.opts.dry_run(): path.copy_tree(src, dst) - def report(self, _config, _build): - if not _build.opts.get_arg('--no-report') \ + def report(self, _config, _build, opts, macros): + if len(_build.main_package().name()) > 0 \ and not _build.macros.get('%{_disable_reporting}') \ - and _build.opts.get_arg('--mail'): + and (not _build.opts.get_arg('--no-report') \ + or _build.opts.get_arg('--mail')): format = _build.opts.get_arg('--report-format') if format is None: - format = 'html' - ext = '.html' + format = 'text' + ext = '.txt' else: if len(format) != 2: raise error.general('invalid report format option: %s' % ('='.join(format))) @@ -110,6 +111,12 @@ class buildset: elif format[1] == 'html': format = 'html' ext = '.html' + elif format[1] == 'xml': + format = 'xml' + ext = '.xml' + elif format[1] == 'ini': + format = 'ini' + ext = '.ini' else: raise error.general('invalid report format: %s' % (format[1])) buildroot = _build.config.abspath('%{buildroot}') @@ -117,22 +124,26 @@ class buildset: name = _build.main_package().name() + ext log.notice('reporting: %s -> %s' % (_config, name)) if not _build.opts.get_arg('--no-report'): - outpath = path.host(path.join(buildroot, prefix, 'share', 'rtems-source-builder')) - outname = path.host(path.join(outpath, name)) - r = reports.report(format, self.configs, _build.opts, _build.macros) - r.setup() + outpath = path.host(path.join(buildroot, prefix, 'share', 'rtems', 'rsb')) + if not _build.opts.dry_run(): + outname = path.host(path.join(outpath, name)) + else: + outname = None + r = reports.report(format, self.configs, + copy.copy(opts), copy.copy(macros)) r.introduction(_build.config.file_name()) - r.config(_build.config, _build.opts, _build.macros) + r.generate(_build.config.file_name()) + r.epilogue(_build.config.file_name()) if not _build.opts.dry_run(): _build.mkdir(outpath) r.write(outname) del r - if not _build.macros.get('%{_disable_reporting}') \ - and _build.opts.get_arg('--mail'): - r = reports.report('text', self.configs, _build.opts, _build.macros) - r.setup() + if _build.opts.get_arg('--mail'): + r = reports.report('text', self.configs, + copy.copy(opts), copy.copy(macros)) r.introduction(_build.config.file_name()) - r.config(_build.config, _build.opts, _build.macros) + r.generate(_build.config.file_name()) + r.epilogue(_build.config.file_name()) self.write_mail_report(r.out) del r @@ -176,7 +187,6 @@ class buildset: if _build.canadian_cross(): self.canadian_cross(_build) _build.make() - self.report(_config, _build) if not _build.macros.get('%{_disable_collecting}'): self.root_copy(_build.config.expand('%{buildroot}'), _build.config.expand('%{_tmproot}')) @@ -340,6 +350,9 @@ class buildset: mail_report = False if deps is None: self.build_package(configs[s], b) + self.report(configs[s], b, + copy.copy(self.opts), + copy.copy(self.macros)) if s == len(configs) - 1 and not have_errors: self.bset_tar(b) else: |