# # RTEMS Tools Project (http://www.rtems.org/) # Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-testing'. # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # Create an error log. # from __future__ import print_function import os from . import error from . import log def generate(name, opts, header = None, footer = None): label, result = opts.with_arg('error-report') if (label.startswith('without_') and result != 'yes') or \ (label.startswith('with_') and result != 'no'): r = ['RTEMS Tools Project - Source Builder Error Report'] + [] if header: r += [' %s' % (header)] r += [opts.info()] if opts.defaults.get_value('%{_sbgit_valid}') == '1': r += [' %s/%s' % (opts.defaults.get_value('%{_sbgit_remotes}'), opts.defaults.get_value('%{_sbgit_id}'))] else: r += [' RSB: not a valid repo'] if os.name == 'nt': r += [' Windows'] else: r += [' %s' % (' '.join(os.uname()))] r += [] r += ['Tail of the build log:'] r += log.tail() if footer: r += [footer] try: name = name.replace('/', '-') with open(name, 'w') as l: l.write(os.linesep.join(r)) log.notice(os.linesep.join([' See error report: %s' % (name), ' Note: In some cases the error appears only in', ' the complete build log (see --log option)'])) except: log.stderr('error: failure to create error report') raise