Add persitent data store from trunk, sync the fetcher changes to use the persistent...
[bitbake.git] / lib / bb / msg.py
1 # ex:ts=4:sw=4:sts=4:et
2 # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
3 """
4 BitBake 'msg' implementation
5
6 Message handling infrastructure for bitbake
7
8 """
9
10 # Copyright (C) 2006        Richard Purdie
11 #
12 # This program is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License version 2 as
14 # published by the Free Software Foundation.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License along
22 # with this program; if not, write to the Free Software Foundation, Inc.,
23 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24
25 import sys, os, re, bb
26 from bb import utils, event
27
28 debug_level = {}
29
30 verbose = False
31
32 domain = bb.utils.Enum(
33     'Build',
34     'Cache',
35     'Collection',
36     'Data',
37     'Depends',
38     'Fetcher',
39     'Parsing',
40     'PersistData',
41     'Provider',
42     'RunQueue',
43     'TaskData',
44     'Util')
45
46
47 class MsgBase(bb.event.Event):
48     """Base class for messages"""
49
50     def __init__(self, msg, d ):
51         self._message = msg
52         event.Event.__init__(self, d)
53
54 class MsgDebug(MsgBase):
55     """Debug Message"""
56
57 class MsgNote(MsgBase):
58     """Note Message"""
59
60 class MsgWarn(MsgBase):
61     """Warning Message"""
62
63 class MsgError(MsgBase):
64     """Error Message"""
65
66 class MsgFatal(MsgBase):
67     """Fatal Message"""
68
69 #
70 # Message control functions
71 #
72
73 def set_debug_level(level):
74     bb.msg.debug_level = {}
75     for domain in bb.msg.domain:
76         bb.msg.debug_level[domain] = level
77     bb.msg.debug_level['default'] = level
78
79 def set_verbose(level):
80     bb.msg.verbose = level
81
82 def set_debug_domains(domains):
83     for domain in domains:
84         found = False
85         for ddomain in bb.msg.domain:
86             if domain == str(ddomain):
87                 bb.msg.debug_level[ddomain] = bb.msg.debug_level[ddomain] + 1
88                 found = True
89         if not found:
90             std_warn("Logging domain %s is not valid, ignoring" % domain)
91
92 #
93 # Message handling functions
94 #
95
96 def debug(level, domain, msg, fn = None):
97     if debug_level[domain] >= level:
98         bb.event.fire(MsgDebug(msg, None))
99         print 'DEBUG: ' + msg
100
101 def note(level, domain, msg, fn = None):
102     if level == 1 or verbose or debug_level[domain] >= 1:
103         std_note(msg)
104
105 def warn(domain, msg, fn = None):
106     std_warn(msg)
107
108 def error(domain, msg, fn = None):
109     std_error(msg)
110
111 def fatal(domain, msg, fn = None):
112     std_fatal(msg)
113
114 #
115 # Compatibility functions for the original message interface
116 #
117 def std_debug(lvl, msg):
118     if debug_level['default'] >= lvl:
119         bb.event.fire(MsgDebug(msg, None))
120         print 'DEBUG: ' + msg
121
122 def std_note(msg):
123     bb.event.fire(MsgNote(msg, None))
124     print 'NOTE: ' + msg
125
126 def std_warn(msg):
127     bb.event.fire(MsgWarn(msg, None))
128     print 'WARNING: ' + msg
129
130 def std_error(msg):
131     bb.event.fire(MsgError(msg, None))
132     print 'ERROR: ' + msg
133
134 def std_fatal(msg):
135     bb.event.fire(MsgFatal(msg, None))
136     print 'ERROR: ' + msg
137     sys.exit(1)