buildframework/helium/sf/python/pythoncore/lib/log2xml.py
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
child 645 b8d81fa19e7d
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
#============================================================================ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
#Name        : log2xml.py 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
#Part of     : Helium 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
#All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
#This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
#under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
#which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
#Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
#Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
#Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
#Description:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
#===============================================================================
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    20
""" Symbian log converter."""
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    21
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import xml.dom.minidom
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import sys
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import os
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import re
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import codecs
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import time
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import datetime
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
from xml.sax import make_parser 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
from xml.sax.handler import ContentHandler 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
from xml.sax.saxutils import escape
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
DEFAULT_CONFIGURATION = {"FATAL": [r"mingw_make.exe"],
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
                         "ERROR": [r'^(?:(?:\s*\d+\)\s*)|(?:\s*\*\*\*\s*))ERROR:',
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
                                   r"^MISSING:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
                                   r"Error:\s+",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
                                   r"^Error:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
                                   r"'.+' is not recognized as an internal or external command",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
                                   r"FLEXlm error:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
                                   r"(ABLD|BLDMAKE) ERROR:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
                                   r"FATAL ERROR\(S\):",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
                                   r"fatal error U1077",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
                                   r"warning U4010",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
                                   r"^make(?:\[\d+\])?\: \*\*\*",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
                                   r"^make(?:\[\d+\])?:\s+.*\s+not\s+remade",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
                                   r"\"(.*)\", line (\d+): (Error: +(.\d+.*?):.*)$",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
                                   r"error: ((Internal fault):.*)$",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
                                   r"Exception: [A-Z0-9_]+",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
                                   r"target .* given more than once in the same rule",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
                                   r"^ERROR:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
                                   r"^ERROR EC\d+:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
                                   r"^ERROR\t",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
                                   r"syntax error at line",],
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
                         "CRITICAL": [r"[Ww]arning:?\s+(#111-D|#1166-D|#117-D|#128-D|#1293-D|#1441-D|#170-D|#174-D|#175-D|#185-D|#186-D|#223-D|#231-D|#257-D|#284-D|#368-D|#414-D|#430-D|#47-D|#514-D|#546-D|#68-D|#69-D|#830-D|#940-D|#836-D|A1495E|L6318W|C2874W|C4127|C4355|C4530|C4702|C4786|LNK4049)"],
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
                         "WARNING": [r'\): Missing file:',
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
                                      r'^(\d+\))?\s*WARNING:', r'^MAKEDEF WARNING:',
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
                                      r'line \d+: Warning:', r':\s+warning\s+\w+:',
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
                                      r"\\\\(.*?)\(\d+\)\s:\sWarning:\s\(\d+\)",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
                                      r"^(BLDMAKE |MAKEDEF )?WARNING:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
                                      r"WARNING\(S\)",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
                                      r"\(\d+\) : warning C",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
                                      r"LINK : warning",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
                                      r":\d+: warning:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
                                      r"\"(.*)\", line (\d+): (Warning: +(?!A1495E)(.\d+.*?):.*)$",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
                                      r"Usage Warning:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
                                      r"mwld.exe:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
                                      r"^Command line warning",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
                                      r"ERROR: bad relocation:",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
                                      r"^(\d+) warning",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
                                      r"EventType:\s+Error\s+Source:\s+SweepNT",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
                                      r"^WARN\t",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
                                      ],
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
                        "REMARK": [r"Command line warning D4025 : ",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
                                   r"^REMARK: ",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
                                   r"^EventType:\s+Error\s+Source:\s+GNU\s+Make",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
                                   r":\d+: warning: cannot find matching deallocation function",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
                                   r"((:\d+)*: note: )",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
                                   ],
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
                        "INFO": [r"^INFO:"]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
                        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
def find_priority(line, config):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    85
    """find priority"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
    keys = config.keys()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    keys.reverse()    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
    for category in keys:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
        for rule in config[category]:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
            if rule.search(line) != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
                return category.lower()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
    return "stdout"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
class Stack:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    """ Bottomless stack. If empty just pop a default element. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
    def __init__(self, default):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
        self.__default = default
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
        self.__stack = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    def pop(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   102
        """pop off the stack"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
        result = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
            result = self.__stack.pop()
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   106
        except IndexError:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
            result = self.__default
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
    def push(self, item):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   111
        """push on the stack"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        self.__stack.append(item)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
    def __len__(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        return len(self.__stack)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
def to_cdata(text):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
    """ Cleanup string to match CDATA requiements.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
        These are the only allowed characters: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF].
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
    result = ""
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   122
    for char in list(text):
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   123
        v_char = ord(char)
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   124
        if v_char == 0x9 or v_char == 0xa or v_char == 0xd:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   125
            result += char
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   126
        elif v_char >= 0x20 and v_char <= 0xd7ff:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   127
            result += char
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   128
        elif v_char >= 0xe000 and v_char <= 0xfffd:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   129
            result += char
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   130
        elif v_char >= 0x10000 and v_char <= 0x10ffff:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   131
            result += char
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
            result += " " 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
    return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
class LogWriter(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
    """ XML Log writer. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
    def __init__(self, stream, filename):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
        self.__stream = stream
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
        self.__stream.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
        self.__stream.write("<log filename=\"%s\">\n" % filename)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
        self.__stream.write("\t<build>\n")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
        self.__indent = "\t"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
        self.__intask = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
    def close(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   148
        """ closing open tasks"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
        while self.__intask > 0:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
            self.close_task()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        self.__stream.write("\t</build>\n")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        self.__stream.write("</log>\n")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
        self.__stream.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
    def open_task(self, name):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   156
        """open taks"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
        self.__indent += "\t"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
        self.__intask += 1
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        self.__stream.write("%s<task name=\"%s\">\n" % (self.__indent, name))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
    def close_task(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   162
        """close task"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        if self.__intask > 0:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
            self.__intask -= 1
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
            self.__stream.write("%s</task>\n" % (self.__indent))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
            self.__indent = self.__indent[:-1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
    def message(self, priority, msg):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   169
        """message"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
        try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
            acdata = to_cdata(msg.decode('utf-8', 'ignore'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
            self.__stream.write("%s<message priority=\"%s\"><![CDATA[%s]]></message>\n" % (self.__indent+"\t", priority, acdata))
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   173
        except UnicodeDecodeError, exc:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   174
            print exc
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
def convert(inputfile, outputfile, fulllogging=True, configuration=DEFAULT_CONFIGURATION):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
    """ Convert an input log into an XML log and write an outputfile. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
    # Compiling the regexp  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
    built_config = {}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
    for category in configuration.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
        built_config[category] = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
        for rule in configuration[category]:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
            built_config[category].append(re.compile(rule))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
    # Generating the XML log
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    log = open(inputfile, 'r')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
    olog = codecs.open(outputfile, 'w+', 'utf-8', errors='ignore')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
    xmllog = LogWriter(olog, inputfile)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
    match_finnished = re.compile(r"^===\s+.+\s+finished") 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
    match_started = re.compile(r"^===\s+(.+)\s+started") 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
    match_component = re.compile(r"^===\s+(.+?)\s+==\s+(.+)")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
    match_logger_component = re.compile(r'^\s*\[.+?\]\s*')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
    #match_ant_target_start = re.compile(r'.*INFO\s+-\s+Target\s+####\s+(.+)\s+####\s+has\s+started')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
    #match_ant_target_end = re.compile(r'.*INFO\s+-\s+Target\s+####\s+(.+)\s+####\s+has\s+finnished')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
    match_ant_target_start = re.compile(r'^([^\s=\[\]]+):$')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
    match_ant_target_end = re.compile(r'^([^\s=]+):\s+duration')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
    symbian = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
    ant_has_open_task = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
    # looping
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
    for line in log:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
        # matching Ant logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
        if not symbian and match_ant_target_end.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
            xmllog.close_task()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
            ant_has_open_task = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
            continue
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
        elif not symbian and match_ant_target_start.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
            result = match_ant_target_start.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
            if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
                if ant_has_open_task:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
                    xmllog.close_task()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
                    ant_has_open_task = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
                xmllog.open_task(result.group(1))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
                ant_has_open_task = True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
            continue
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
        # matching Symbian logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
        line = match_logger_component.sub(r'', line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
        line = line.strip()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
        if line.startswith("++ Finished at"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
            xmllog.close_task()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
        elif line.startswith("=== "):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
            if match_finnished.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
                xmllog.close_task()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
            else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
                # This is a symbian log
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
                symbian = True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
                result = match_component.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
                if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
                    xmllog.open_task(result.group(2))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
                # === cenrep_s60_32 started
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
                result = match_started.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
                if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
                    xmllog.open_task(result.group(1))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
            # Type?
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
            priority = find_priority(line, built_config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
            if (fulllogging or priority != 'stdout'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
                xmllog.message(priority, line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
    # end file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
    xmllog.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
def convert_old(inputfile, outputfile, fulllogging=True, configuration=DEFAULT_CONFIGURATION):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
    """ Convert an input log into an XML log and write an outputfile. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
    # Compiling the regexp  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
    built_config = {}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
    for category in configuration.keys():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
        built_config[category] = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
        for rule in configuration[category]:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
            built_config[category].append(re.compile(rule))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
    # Generating the XML log
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
    log = open (inputfile, 'r')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
    doc = xml.dom.minidom.Document()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
    root = doc.createElementNS("", "log")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
    root.setAttributeNS("", "name", inputfile)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
    doc.appendChild(root)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
    build = doc.createElementNS("", "build")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
    root.appendChild(build)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
    # current group/task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
    current = build
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
    # bottomless stask, if losing sync all message will be at top level.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
    stack = Stack(build)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
    match_finnished = re.compile(r"^===\s+.+\s+finished") 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
    match_started = re.compile(r"===\s+(.+)\s+started") 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
    match_component = re.compile(r"^===\s+(.+?)\s+==\s+(.+)")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
    match_logger_component = re.compile(r'^\s*\[.+?\]\s*')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
    #match_ant_target_start = re.compile(r'.*INFO\s+-\s+Target\s+####\s+(.+)\s+####\s+has\s+started')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
    #match_ant_target_end = re.compile(r'.*INFO\s+-\s+Target\s+####\s+(.+)\s+####\s+has\s+finnished')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
    match_ant_target_start = re.compile(r'^([^\s=]+):$')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
    match_ant_target_end = re.compile(r'^([^\s=]+):\s+duration')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
    # looping
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
    for line in log:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
        # matching Ant logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
        if match_ant_target_end.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
            current = stack.pop()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
            continue
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
        elif match_ant_target_start.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
            result = match_ant_target_start.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
            if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
                stack.push(current)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
                task = doc.createElementNS("", "task")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
                task.setAttributeNS("", "name", result.group(1))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
                current.appendChild(task)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
                current = task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
            continue
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
        # matching Symbian logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
        line = match_logger_component.sub(r'', line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
        line = line.strip()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
        if line.startswith("++ Finished at"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
            current = stack.pop()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
        elif line.startswith("==="):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
            if match_finnished.match(line):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
                current = stack.pop()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
            else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
                result = match_component.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
                if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
                    stack.push(current)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
                    task = doc.createElementNS("", "task")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
                    task.setAttributeNS("", "name", result.group(2))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
                    current.appendChild(task)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
                    current = task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
                # === cenrep_s60_32 started
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
                result = match_started.match(line)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
                if result != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
                    task = doc.createElementNS("", "task")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
                    task.setAttributeNS("", "name", result.group(1))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
                    stack.push(current)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
                    current.appendChild(task)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
                    current = task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
            msg = doc.createElementNS("", "message")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
            # Type?
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
            priority = find_priority(line, built_config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
            if (fulllogging or priority != 'stdout'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
                msg.setAttributeNS("", "priority", priority)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
                msg.appendChild(doc.createCDATASection(to_cdata(line.decode("utf-8"))))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
                current.appendChild(msg)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
    file_object = codecs.open(outputfile, 'w', "utf_8")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
    file_object.write(doc.toprettyxml())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
    file_object.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
class ContentWriter(ContentHandler):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
    """ SAX Content writer. Parse and write an XML file. """
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   332
    def __init__(self, op_sys, indent=""):
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   333
        ContentHandler.__init__(self)
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   334
        self.os = op_sys
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
        self.indent = indent
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
        self.__content = u""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
    def startElement(self, name, attrs):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   339
        """start Element"""
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   340
        self.os.write(self.indent + "<" + name)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
        if attrs.getLength() > 0:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   342
            self.os.write(" ")
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   343
        self.os.write(" ".join(["%s=\"%s\"" % (x, attrs.getValue(x)) for x in attrs.getNames()]))
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
        self.os.write(">\n")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
        self.indent += "\t"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
        self.__content = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
    def endElement(self, name):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   349
        """end element"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
        if len(self.__content) > 0:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   351
            self.os.write(self.indent + self.__content + "\n")
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
        self.indent = self.indent[:-1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
        self.os.write("%s</%s>\n" % (self.indent, name))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
        self.__content = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
        
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   356
    def characters(self, content):
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   357
        """characters"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
        self.__content += unicode(escape(content.strip()))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
class AppendSummary(ContentWriter):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
    """ SAX content handler to add an XML log to the summary. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
    def __init__(self, output, xmllog):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
        ContentWriter.__init__(self, output)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
        self.xmllog = xmllog
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
    def startDocument(self):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   367
        """start document"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
        self.os.write('<?xml version="1.0" encoding="utf-8"?>\n')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
    def startElement(self, name, attrs):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   371
        """start element"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
        ContentWriter.startElement(self, name, attrs)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
        if name == "logSummary":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
            parser = make_parser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
            parser.setContentHandler(ContentWriter(self.os, self.indent))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
            parser.parse(open(self.xmllog, 'r'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
def append_summary(summary, xmllog, maxmb=80):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
    """ Append content to the summary xml file. """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
    if os.path.getsize(summary) + os.path.getsize(xmllog) > (maxmb*1024*1024):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
        print 'Error: ' + summary + ' larger than ' + str(maxmb) + 'MB, not appending'
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
        return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
    outfile = codecs.open(summary + ".tmp", 'w', "utf8")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
    parser = make_parser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   387
    parser.setContentHandler(AppendSummary(outfile, xmllog))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   388
    
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   389
    input_ = open(summary, 'r')
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   390
    parser.parse(input_)
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   391
    input_.close()
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   392
    outfile.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   393
    # Updating the summary file.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   394
    os.unlink(summary)
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   395
    os.rename(summary + ".tmp", summary)
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   396
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   397
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   398
def symbian_log_header(output, config, command, dir_):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   399
    """symbian log header"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   400
    output.log("===-------------------------------------------------")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   401
    output.log("=== %s" % config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   402
    output.log("===-------------------------------------------------")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   403
    output.log("=== %s started %s" % (config, datetime.datetime.now().ctime()))
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   404
    output.log("=== %s == %s" % (config, dir_))
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   405
    output.log("-- %s" % command)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   406
    output.log("++ Started at %s" % datetime.datetime.now().ctime())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   407
    output.log("+++ HiRes Start %f" % time.time())
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   408
    output.log("Chdir %s" % dir_)
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   409
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   410
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   411
def symbian_log_footer(output):
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   412
    """symbian log footer"""
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   413
    output.log("+++ HiRes End %f" % time.time())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   414
    output.log("++ Finished at %s" % datetime.datetime.now().ctime())
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   415
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   416
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   417
if __name__ == "__main__":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   418
    convert(sys.argv[1], "%s.xml" % sys.argv[1], fulllogging=False)
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   419
    # An empty summary:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   420
    #   <?xml version=\"1.0\" encoding=\"UTF-8\"?><logSummary/>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   421
    #
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   422
    
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   423
    #s = open(r"z:\summary.xml", "w")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   424
    #s.write("""<?xml version=\"1.0\" encoding=\"UTF-8\"?><logSummary/>""")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   425
    #s.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   426
    #append_summary(r'Z:\summary.xml', r'Z:\output\logs\test_0.0.1.mc_5132_2_build.log2.xml')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   427
    #append_summary(r'Z:\summary.xml', r'Z:\output\logs\test_0.0.1_BOM.xml')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   428
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   429