Changeset 6733a85 in rtems-source-builder


Ignore:
Timestamp:
Dec 8, 2014, 6:19:07 AM (5 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.10, 4.11, 4.9, master
Children:
63ab31b
Parents:
e794d0a
git-author:
Sebastian Huber <sebastian.huber@…> (12/08/14 06:19:07)
git-committer:
Sebastian Huber <sebastian.huber@…> (12/11/14 06:50:10)
Message:

sb: Move content to formatter classes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/reports.py

    re794d0a r6733a85  
    6161    return os.path.abspath(path.host(p))
    6262
    63 class chunk:
     63class formatter(object):
    6464    def __init__(self):
    65         self.data = ''
     65        self.content = ''
    6666
    6767    def line(self, text):
    68         self.data += text + '\n'
     68        self.content += text + '\n'
    6969
    7070    def add(self, text):
    71         self.data += text
    72 
    73     def get(self):
    74         return self.data
    75 
    76 class formatter(object):
     71        self.content += text
     72
    7773    def set_sbpath(self, sbpath):
    7874        self.sbpath = sbpath
     
    8581
    8682    def introduction(self, name, now, intro_text):
    87         c = chunk()
    88         c.line('=' * _line_len)
    89         c.line('%s %s' % (_title, now))
     83        self.line('=' * _line_len)
     84        self.line('%s %s' % (_title, now))
    9085        if intro_text:
    91             c.line('')
    92             c.line('%s' % ('\n'.join(intro_text)))
    93         c.line('=' * _line_len)
    94         c.line('Report: %s' % (name))
    95         return c.get()
     86            self.line('')
     87            self.line('%s' % ('\n'.join(intro_text)))
     88        self.line('=' * _line_len)
     89        self.line('Report: %s' % (name))
    9690
    9791    def epilogue(self, name):
    98         return ''
     92        return
    9993
    10094    def config_start(self, nest_level, name):
    101         return ''
     95        return
    10296
    10397    def config(self, nest_level, name, _config):
    104         c = chunk()
    105         c.line('-' * _line_len)
    106         c.line('Package: %s' % (name))
    107         c.line(' Config: %s' % (_config.file_name()))
    108         return c.get()
     98        self.line('-' * _line_len)
     99        self.line('Package: %s' % (name))
     100        self.line(' Config: %s' % (_config.file_name()))
    109101
    110102    def config_end(self, nest_level, name):
    111         return ''
     103        return
    112104
    113105    def buildset_start(self, nest_level, name):
    114         c = chunk()
    115         c.line('=-' * (_line_len / 2))
    116         c.line('Build Set: %s' % (name))
    117         return c.get()
     106        self.line('=-' * (_line_len / 2))
     107        self.line('Build Set: %s' % (name))
    118108
    119109    def buildset_end(self, nest_level, name):
    120         return ''
     110        return
    121111
    122112    def info(self, nest_level, name, info, separated):
    123         c = chunk()
    124         c.line(' ' + name + ':')
     113        self.line(' ' + name + ':')
    125114        for l in info:
    126             c.line('  ' + l)
    127         return c.get()
     115            self.line('  ' + l)
    128116
    129117    def directive(self, nest_level, name, data):
    130         c = chunk()
    131         c.line(' %s:' % (name))
     118        self.line(' %s:' % (name))
    132119        for l in data:
    133             c.line('  ' + l)
    134         return c.get()
     120            self.line('  ' + l)
    135121
    136122    def files(self, nest_level, sigular, plural, _files):
    137         c = chunk()
    138         c.line('  ' + plural + ': %d' % (len(_files)))
     123        self.line('  ' + plural + ': %d' % (len(_files)))
    139124        i = 0
    140125        for name in _files:
    141126            for s in _files[name]:
    142127                i += 1
    143                 c.line('   %2d: %s' % (i, s[0]))
     128                self.line('   %2d: %s' % (i, s[0]))
    144129                if s[1] is None:
    145130                    h = 'No checksum'
     
    147132                    hash = s[1].split()
    148133                    h = '%s: %s' % (hash[0], hash[1])
    149                 c.line('       %s' % (h))
    150         return c.get()
    151 
    152     def post_process(self, out):
    153         return out
     134                self.line('       %s' % (h))
     135
     136    def post_process(self):
     137        return self.content
    154138
    155139class asciidoc_formatter(formatter):
     140    def __init__(self):
     141        super(asciidoc_formatter, self).__init__()
     142
    156143    def format(self):
    157144        return 'asciidoc'
     
    161148
    162149    def introduction(self, name, now, intro_text):
    163         c = chunk()
    164150        h = 'RTEMS Source Builder Report'
    165         c.line(h)
    166         c.line('=' * len(h))
    167         c.line(':doctype: book')
    168         c.line(':toc2:')
    169         c.line(':toclevels: 5')
    170         c.line(':icons:')
    171         c.line(':numbered:')
    172         c.line(':data-uri:')
    173         c.line('')
    174         c.line(_title)
    175         c.line(now)
    176         c.line('')
     151        self.line(h)
     152        self.line('=' * len(h))
     153        self.line(':doctype: book')
     154        self.line(':toc2:')
     155        self.line(':toclevels: 5')
     156        self.line(':icons:')
     157        self.line(':numbered:')
     158        self.line(':data-uri:')
     159        self.line('')
     160        self.line(_title)
     161        self.line(now)
     162        self.line('')
    177163        image = _make_path(self.sbpath, options.basepath, 'images', 'rtemswhitebg.jpg')
    178         c.line('image:%s["RTEMS",width="20%%"]' % (image))
    179         c.line('')
     164        self.line('image:%s["RTEMS",width="20%%"]' % (image))
     165        self.line('')
    180166        if intro_text:
    181             c.line('%s' % ('\n'.join(intro_text)))
    182         return c.get()
     167            self.line('%s' % ('\n'.join(intro_text)))
    183168
    184169    def git_status(self, valid, dirty, head, remotes):
    185         c = chunk()
    186         c.line('')
    187         c.line("'''")
    188         c.line('')
    189         c.line('.%s' % (_git_status_text))
     170        self.line('')
     171        self.line("'''")
     172        self.line('')
     173        self.line('.%s' % (_git_status_text))
    190174        if valid:
    191             c.line('*Remotes*:;;')
     175            self.line('*Remotes*:;;')
    192176            for r in remotes:
    193177                if 'url' in remotes[r]:
     
    196180                    text = 'no URL found'
    197181                text = '%s: %s' % (r, text)
    198                 c.line('. %s' % (text))
    199             c.line('*Status*:;;')
     182                self.line('. %s' % (text))
     183            self.line('*Status*:;;')
    200184            if dirty:
    201                 c.line('_Repository is dirty_')
     185                self.line('_Repository is dirty_')
    202186            else:
    203                 c.line('Clean')
    204             c.line('*Head*:;;')
    205             c.line('Commit: %s' % (head))
     187                self.line('Clean')
     188            self.line('*Head*:;;')
     189            self.line('Commit: %s' % (head))
    206190        else:
    207             c.line('_Not a valid GIT repository_')
    208         c.line('')
    209         c.line("'''")
    210         c.line('')
    211         return c.get()
     191            self.line('_Not a valid GIT repository_')
     192        self.line('')
     193        self.line("'''")
     194        self.line('')
    212195
    213196    def config(self, nest_level, name, _config):
    214         c = chunk()
    215         c.line('*Package*: _%s_ +' % (name))
    216         c.line('*Config*: %s' % (_config.file_name()))
    217         c.line('')
    218         return c.get()
     197        self.line('*Package*: _%s_ +' % (name))
     198        self.line('*Config*: %s' % (_config.file_name()))
     199        self.line('')
    219200
    220201    def config_end(self, nest_level, name):
    221         c = chunk()
    222         c.line('')
    223         c.line("'''")
    224         c.line('')
    225         return c.get()
     202        self.line('')
     203        self.line("'''")
     204        self.line('')
    226205
    227206    def buildset_start(self, nest_level, name):
    228         c = chunk()
    229207        h = '%s' % (name)
    230         c.line('=%s %s' % ('=' * nest_level, h))
    231         return c.get()
     208        self.line('=%s %s' % ('=' * nest_level, h))
    232209
    233210    def info(self, nest_level, name, info, separated):
    234         c = chunk()
    235211        end = ''
    236212        if separated:
    237             c.line('*%s:*::' % (name))
    238             c.line('')
     213            self.line('*%s:*::' % (name))
     214            self.line('')
    239215        else:
    240             c.line('*%s:* ' % (name))
     216            self.line('*%s:* ' % (name))
    241217            end = ' +'
    242218        spaces = ''
    243219        for l in info:
    244             c.line('%s%s%s' % (spaces, l, end))
     220            self.line('%s%s%s' % (spaces, l, end))
    245221        if separated:
    246             c.line('')
    247         return c.get()
     222            self.line('')
    248223
    249224    def directive(self, nest_level, name, data):
    250         c = chunk()
    251         c.line('')
    252         c.line('*%s*:' % (name))
    253         c.line('--------------------------------------------')
     225        self.line('')
     226        self.line('*%s*:' % (name))
     227        self.line('--------------------------------------------')
    254228        for l in data:
    255             c.line(l)
    256         c.line('--------------------------------------------')
    257         return c.get()
     229            self.line(l)
     230        self.line('--------------------------------------------')
    258231
    259232    def files(self, nest_level, singular, plural, _files):
    260         c = chunk()
    261         c.line('')
    262         c.line('*' + plural + ':*::')
     233        self.line('')
     234        self.line('*' + plural + ':*::')
    263235        if len(_files) == 0:
    264             c.line('No ' + plural.lower())
     236            self.line('No ' + plural.lower())
    265237        for name in _files:
    266238            for s in _files[name]:
    267                 c.line('. %s' % (s[0]))
     239                self.line('. %s' % (s[0]))
    268240                if s[1] is None:
    269241                    h = 'No checksum'
     
    271243                    hash = s[1].split()
    272244                    h = '%s: %s' % (hash[0], hash[1])
    273                 c.line('+\n%s\n' % (h))
    274         return c.get()
     245                self.line('+\n%s\n' % (h))
    275246
    276247class html_formatter(asciidoc_formatter):
     
    293264        return '.html'
    294265
    295     def post_process(self, out):
     266    def post_process(self):
    296267        import StringIO
    297         infile = StringIO.StringIO(out)
     268        infile = StringIO.StringIO(self.content)
    298269        outfile = StringIO.StringIO()
    299270        self.asciidoc.execute(infile, outfile)
     
    315286
    316287    def introduction(self, name, now, intro_text):
    317         c = chunk()
    318         c.line('=' * _line_len)
    319         c.line('%s %s' % (_title, now))
     288        self.line('=' * _line_len)
     289        self.line('%s %s' % (_title, now))
    320290        if intro_text:
    321             c.line('')
    322             c.line('%s' % ('\n'.join(intro_text)))
    323         c.line('=' * _line_len)
    324         c.line('Report: %s' % (name))
    325         return c.get()
     291            self.line('')
     292            self.line('%s' % ('\n'.join(intro_text)))
     293        self.line('=' * _line_len)
     294        self.line('Report: %s' % (name))
    326295
    327296    def git_status_header(self):
    328         c = chunk()
    329         c.line('-' * _line_len)
    330         c.line('%s' % (_git_status_text))
    331         return c.get()
     297        self.line('-' * _line_len)
     298        self.line('%s' % (_git_status_text))
    332299
    333300    def git_status(self, valid, dirty, head, remotes):
    334         c = chunk()
    335         c.add(self.git_status_header())
     301        self.git_status_header()
    336302        if valid:
    337             c.line('%s Remotes:' % (self.cini))
     303            self.line('%s Remotes:' % (self.cini))
    338304            rc = 0
    339305            for r in remotes:
     
    344310                    text = 'no URL found'
    345311                text = '%s: %s' % (r, text)
    346                 c.line('%s  %2d: %s' % (self.cini, rc, text))
    347             c.line('%s Status:' % (self.cini))
     312                self.line('%s  %2d: %s' % (self.cini, rc, text))
     313            self.line('%s Status:' % (self.cini))
    348314            if dirty:
    349                 c.line('%s  Repository is dirty' % (self.cini))
     315                self.line('%s  Repository is dirty' % (self.cini))
    350316            else:
    351                 c.line('%s  Clean' % (self.cini))
    352             c.line('%s Head:' % (self.cini))
    353             c.line('%s  Commit: %s' % (self.cini, head))
     317                self.line('%s  Clean' % (self.cini))
     318            self.line('%s Head:' % (self.cini))
     319            self.line('%s  Commit: %s' % (self.cini, head))
    354320        else:
    355             c.line('%s Not a valid GIT repository' % (self.cini))
    356         return c.get()
     321            self.line('%s Not a valid GIT repository' % (self.cini))
    357322
    358323class ini_formatter(text_formatter):
     
    368333
    369334    def introduction(self, name, now, intro_text):
    370         c = chunk()
    371         c.line(';')
    372         c.line('; %s %s' % (_title, now))
     335        self.line(';')
     336        self.line('; %s %s' % (_title, now))
    373337        if intro_text:
    374             c.line(';')
    375             c.line('; %s' % ('\n; '.join(intro_text)))
    376             c.line(';')
    377         return c.get()
     338            self.line(';')
     339            self.line('; %s' % ('\n; '.join(intro_text)))
     340            self.line(';')
    378341
    379342    def git_status_header(self):
    380         c = chunk()
    381         c.line(';')
    382         c.line('; %s' % (_git_status_text))
    383         c.line(';')
    384         return c.get()
     343        self.line(';')
     344        self.line('; %s' % (_git_status_text))
     345        self.line(';')
    385346
    386347    def config(self, nest_level, name, _config):
    387         return ''
     348        return
    388349
    389350    def buildset_start(self, nest_level, name):
    390         return ''
     351        return
    391352
    392353    def info(self, nest_level, name, info, separated):
    393         return ''
     354        return
    394355
    395356    def directive(self, nest_level, name, data):
    396         return ''
     357        return
    397358
    398359    def files(self, nest_level, singular, plural, _files):
    399         return ''
     360        return
    400361
    401362class xml_formatter(formatter):
     363    def __init__(self):
     364        super(xml_formatter, self).__init__()
     365
    402366    def format(self):
    403367        return 'xml'
     
    407371
    408372    def introduction(self, name, now, intro_text):
    409         c = chunk()
    410         c.line('<RTEMSSourceBuilderReport>')
     373        self.line('<RTEMSSourceBuilderReport>')
    411374        if intro_text:
    412             c.line('\t<Introduction>%s</Introduction>' % (intro_text))
    413         return c.get()
     375            self.line('\t<Introduction>%s</Introduction>' % (intro_text))
    414376
    415377    def epilogue(self, name):
    416         c = chunk()
    417         c.line('</RTEMSSourceBuilderReport>')
    418         return c.get()
     378        self.line('</RTEMSSourceBuilderReport>')
    419379
    420380    def git_status(self, valid, dirty, head, remotes):
    421         c = chunk()
    422         c.line('\t<Git>')
     381        self.line('\t<Git>')
    423382        if valid:
    424383            if dirty:
    425                 c.line('\t\t<Status>dirty</Status>')
     384                self.line('\t\t<Status>dirty</Status>')
    426385            else:
    427                 c.line('\t\t<Status>clean</Status>')
    428             c.line('\t\t<Commit>' + head + '</Commit>')
     386                self.line('\t\t<Status>clean</Status>')
     387            self.line('\t\t<Commit>' + head + '</Commit>')
    429388        else:
    430             c.line('\t\t<Status>invalid</Status>')
    431         c.line('\t</Git>')
    432         return c.get()
     389            self.line('\t\t<Status>invalid</Status>')
     390        self.line('\t</Git>')
    433391
    434392    def config_start(self, nest_level, name):
    435         c = chunk()
    436         c.line('\t' * nest_level + '<Package name="' + name + '">')
    437         return c.get()
     393        self.line('\t' * nest_level + '<Package name="' + name + '">')
    438394
    439395    def config(self, nest_level, name, _config):
    440         c = chunk()
    441         c.line('\t' * nest_level + '<Config>' + _config.file_name() + '</Config>')
    442         return c.get()
     396        self.line('\t' * nest_level + '<Config>' + _config.file_name() + '</Config>')
    443397
    444398    def config_end(self, nest_level, name):
    445         c = chunk()
    446         c.line('\t' * nest_level + '</Package>')
    447         return c.get()
     399        self.line('\t' * nest_level + '</Package>')
    448400
    449401    def buildset_start(self, nest_level, name):
    450         c = chunk()
    451         c.line('\t' * nest_level + '<BuildSet name="' + name + '">')
    452         return c.get()
     402        self.line('\t' * nest_level + '<BuildSet name="' + name + '">')
    453403
    454404    def buildset_end(self, nest_level, name):
    455         c = chunk()
    456         c.line('\t' * nest_level + '</BuildSet>')
    457         return c.get()
     405        self.line('\t' * nest_level + '</BuildSet>')
    458406
    459407    def info(self, nest_level, name, info, separated):
    460         c = chunk()
    461         c.add('\t' * nest_level + '<' + name.replace(' ', '') + '>')
     408        self.add('\t' * nest_level + '<' + name.replace(' ', '') + '>')
    462409        for l in info:
    463             c.add(l)
    464         c.line('</' + name + '>')
    465         return c.get()
     410            self.add(l)
     411        self.line('</' + name + '>')
    466412
    467413    def directive(self, nest_level, name, data):
    468         c = chunk()
    469         c.line('\t' * nest_level + '<' + name + '><![CDATA[')
     414        self.line('\t' * nest_level + '<' + name + '><![CDATA[')
    470415        for l in data:
    471             c.line(l.replace(']]>', ']]]><![CDATA[]>'))
    472         c.line(']]></' + name + '>')
    473         return c.get()
     416            self.line(l.replace(']]>', ']]]><![CDATA[]>'))
     417        self.line(']]></' + name + '>')
    474418
    475419    def files(self, nest_level, sigular, plural, _files):
    476         c = chunk()
    477420        for name in _files:
    478421            for s in _files[name]:
    479                 c.add('\t' * nest_level + '<' + sigular)
     422                self.add('\t' * nest_level + '<' + sigular)
    480423                if not (s[1] is None):
    481424                    hash = s[1].split()
    482                     c.add(' ' + hash[0] + '="' + hash[1] + '"')
    483                 c.line('>' + s[0] + '</' + sigular + '>')
    484         return c.get()
     425                    self.add(' ' + hash[0] + '="' + hash[1] + '"')
     426                self.line('>' + s[0] + '</' + sigular + '>')
    485427
    486428def _tree_name(path_):
     
    527469    def git_status(self):
    528470        r = git.repo('.', self.opts, self.macros)
    529         self.out += self.formatter.git_status(r.valid(), r.dirty(), r.head(), r.remotes())
     471        self.formatter.git_status(r.valid(), r.dirty(), r.head(), r.remotes())
    530472
    531473    def introduction(self, name, intro_text = None):
    532474        now = datetime.datetime.now().ctime()
    533         self.out += self.formatter.introduction(name, now, intro_text)
     475        self.formatter.introduction(name, now, intro_text)
    534476        self.git_status()
    535477
    536478    def epilogue(self, name):
    537         self.out += self.formatter.epilogue(name)
     479        self.formatter.epilogue(name)
    538480
    539481    def config_start(self, name, _config):
     
    543485            if cfbn not in self.files['configs']:
    544486                self.files['configs'] += [cfbn]
    545         self.out += self.formatter.config_start(self.bset_nesting + 1, name)
     487        self.formatter.config_start(self.bset_nesting + 1, name)
    546488
    547489    def config_end(self, name, _config):
    548         self.out += self.formatter.config_end(self.bset_nesting + 1, name)
     490        self.formatter.config_end(self.bset_nesting + 1, name)
    549491
    550492    def buildset_start(self, name):
    551493        self.files['buildsets'] += [name]
    552         self.out += self.formatter.buildset_start(self.bset_nesting, name)
     494        self.formatter.buildset_start(self.bset_nesting, name)
    553495
    554496    def buildset_end(self, name):
    555         self.out += self.formatter.buildset_end(self.bset_nesting, name)
     497        self.formatter.buildset_end(self.bset_nesting, name)
    556498
    557499    def source(self, macros):
     
    585527    def output_info(self, name, info, separated = False):
    586528        if info is not None:
    587             self.out += self.formatter.info(self.bset_nesting + 2, name, info, separated)
     529            self.formatter.info(self.bset_nesting + 2, name, info, separated)
    588530
    589531    def output_directive(self, name, directive):
    590532        if directive is not None:
    591             self.out += self.formatter.directive(self.bset_nesting + 2, name, directive)
     533            self.formatter.directive(self.bset_nesting + 2, name, directive)
    592534
    593535    def tree_sources(self, name, tree, sources = []):
     
    627569                tree['patches'] = patches
    628570        self.config_start(name, _config)
    629         self.out += self.formatter.config(self.bset_nesting + 2, name, _config)
     571        self.formatter.config(self.bset_nesting + 2, name, _config)
    630572        self.output_info('Summary', package.get_info('summary'), True)
    631573        self.output_info('URL', package.get_info('url'))
     
    633575        self.output_info('Release', package.get_info('release'))
    634576        self.output_info('Build Arch', package.get_info('buildarch'))
    635         self.out += self.formatter.files(self.bset_nesting + 2, "Source", "Sources", sources)
    636         self.out += self.formatter.files(self.bset_nesting + 2, "Patch", "Patches", patches)
     577        self.formatter.files(self.bset_nesting + 2, "Source", "Sources", sources)
     578        self.formatter.files(self.bset_nesting + 2, "Patch", "Patches", patches)
    637579        self.output_directive('Preparation', package.prep())
    638580        self.output_directive('Build', package.build())
     
    729671
    730672    def write(self, name):
    731         self.out = self.formatter.post_process(self.out)
     673        self.out = self.formatter.post_process()
    732674        if self.is_ini():
    733675            self.generate_ini()
Note: See TracChangeset for help on using the changeset viewer.