diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2011-01-05 00:54:16 +0000 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2011-01-05 00:58:24 +0000 |
commit | 25ac24e02e3e96945e8ac83e16fe27a6b24789b1 (patch) | |
tree | 9a6b3ed525dcbe8ae94ce4248acbde8380cbad76 /bitbake/lib/bb/build.py | |
parent | 03679364a9e280af24ba7038dce54272eb33af83 (diff) | |
download | poky-25ac24e02e3e96945e8ac83e16fe27a6b24789b1.tar.gz |
bitbake: build.py logging updates
python tasks calling shell functions using exec_func() would show the log
file as /dev/null. It makes most sense for all the task logging to be setup
centrally by exec_task(), at least with the current code base in Poky.
This commit will need discussion in relation to upstream bitbake and the
IO redirection could be better handled using a context manager (although
task contexts shouldn't ever nest).
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake/lib/bb/build.py')
-rw-r--r-- | bitbake/lib/bb/build.py | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index 44ad3965a2..e288e35613 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -119,7 +119,7 @@ class LogTee(object): | |||
119 | return '<LogTee {0}>'.format(self.name) | 119 | return '<LogTee {0}>'.format(self.name) |
120 | 120 | ||
121 | 121 | ||
122 | def exec_func(func, d, dirs = None, logfile = NULL): | 122 | def exec_func(func, d, dirs = None): |
123 | """Execute an BB 'function'""" | 123 | """Execute an BB 'function'""" |
124 | 124 | ||
125 | body = data.getVar(func, d) | 125 | body = data.getVar(func, d) |
@@ -163,9 +163,9 @@ def exec_func(func, d, dirs = None, logfile = NULL): | |||
163 | 163 | ||
164 | with bb.utils.fileslocked(lockfiles): | 164 | with bb.utils.fileslocked(lockfiles): |
165 | if ispython: | 165 | if ispython: |
166 | exec_func_python(func, d, runfile, logfile, cwd=adir) | 166 | exec_func_python(func, d, runfile, cwd=adir) |
167 | else: | 167 | else: |
168 | exec_func_shell(func, d, runfile, logfile, cwd=adir) | 168 | exec_func_shell(func, d, runfile, cwd=adir) |
169 | 169 | ||
170 | _functionfmt = """ | 170 | _functionfmt = """ |
171 | def {function}(d): | 171 | def {function}(d): |
@@ -174,7 +174,7 @@ def {function}(d): | |||
174 | {function}(d) | 174 | {function}(d) |
175 | """ | 175 | """ |
176 | logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") | 176 | logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") |
177 | def exec_func_python(func, d, runfile, logfile, cwd=None): | 177 | def exec_func_python(func, d, runfile, cwd=None): |
178 | """Execute a python BB 'function'""" | 178 | """Execute a python BB 'function'""" |
179 | 179 | ||
180 | bbfile = d.getVar('FILE', True) | 180 | bbfile = d.getVar('FILE', True) |
@@ -190,10 +190,6 @@ def exec_func_python(func, d, runfile, logfile, cwd=None): | |||
190 | if cwd: | 190 | if cwd: |
191 | os.chdir(cwd) | 191 | os.chdir(cwd) |
192 | 192 | ||
193 | handler = logging.StreamHandler(logfile) | ||
194 | handler.setFormatter(logformatter) | ||
195 | bblogger.addHandler(handler) | ||
196 | |||
197 | try: | 193 | try: |
198 | comp = utils.better_compile(code, func, bbfile) | 194 | comp = utils.better_compile(code, func, bbfile) |
199 | utils.better_exec(comp, {"d": d}, code, bbfile) | 195 | utils.better_exec(comp, {"d": d}, code, bbfile) |
@@ -203,11 +199,10 @@ def exec_func_python(func, d, runfile, logfile, cwd=None): | |||
203 | 199 | ||
204 | raise FuncFailed(func, None) | 200 | raise FuncFailed(func, None) |
205 | finally: | 201 | finally: |
206 | bblogger.removeHandler(handler) | ||
207 | if olddir: | 202 | if olddir: |
208 | os.chdir(olddir) | 203 | os.chdir(olddir) |
209 | 204 | ||
210 | def exec_func_shell(function, d, runfile, logfile, cwd=None): | 205 | def exec_func_shell(function, d, runfile, cwd=None): |
211 | """Execute a shell function from the metadata | 206 | """Execute a shell function from the metadata |
212 | 207 | ||
213 | Note on directory behavior. The 'dirs' varflag should contain a list | 208 | Note on directory behavior. The 'dirs' varflag should contain a list |
@@ -235,13 +230,16 @@ def exec_func_shell(function, d, runfile, logfile, cwd=None): | |||
235 | cmd = runfile | 230 | cmd = runfile |
236 | 231 | ||
237 | if logger.getEffectiveLevel() <= logging.DEBUG: | 232 | if logger.getEffectiveLevel() <= logging.DEBUG: |
238 | logfile = LogTee(logger, logfile) | 233 | logfile = LogTee(logger, sys.stdout) |
234 | else: | ||
235 | logfile = None | ||
239 | 236 | ||
240 | try: | 237 | try: |
241 | bb.process.run(cmd, env=env, cwd=cwd, shell=False, stdin=NULL, | 238 | bb.process.run(cmd, env=env, cwd=cwd, shell=False, stdin=NULL, |
242 | log=logfile) | 239 | log=logfile) |
243 | except bb.process.CmdError: | 240 | except bb.process.CmdError: |
244 | raise FuncFailed(function, logfile.name) | 241 | logfn = d.getVar('BB_LOGFILE', True) |
242 | raise FuncFailed(function, logfn) | ||
245 | 243 | ||
246 | def _task_data(fn, task, d): | 244 | def _task_data(fn, task, d): |
247 | localdata = data.createCopy(d) | 245 | localdata = data.createCopy(d) |
@@ -308,22 +306,31 @@ def _exec_task(fn, task, d, quieterr): | |||
308 | origstdout = bb.event.useStdout | 306 | origstdout = bb.event.useStdout |
309 | bb.event.useStdout = True | 307 | bb.event.useStdout = True |
310 | 308 | ||
309 | # Ensure python logging goes to the logfile | ||
310 | handler = logging.StreamHandler(logfile) | ||
311 | handler.setFormatter(logformatter) | ||
312 | bblogger.addHandler(handler) | ||
313 | |||
314 | localdata.setVar('BB_LOGFILE', logfn) | ||
315 | |||
311 | event.fire(TaskStarted(task, localdata), localdata) | 316 | event.fire(TaskStarted(task, localdata), localdata) |
312 | try: | 317 | try: |
313 | for func in (prefuncs or '').split(): | 318 | for func in (prefuncs or '').split(): |
314 | exec_func(func, localdata, logfile=logfile) | 319 | exec_func(func, localdata) |
315 | exec_func(task, localdata, logfile=logfile) | 320 | exec_func(task, localdata) |
316 | for func in (postfuncs or '').split(): | 321 | for func in (postfuncs or '').split(): |
317 | exec_func(func, localdata, logfile=logfile) | 322 | exec_func(func, localdata) |
318 | except FuncFailed as exc: | 323 | except FuncFailed as exc: |
319 | if not quieterr: | 324 | if not quieterr: |
320 | logger.error(str(exc)) | 325 | logger.error(str(exc)) |
321 | event.fire(TaskFailed(exc.name, exc.logfile, localdata), localdata) | 326 | event.fire(TaskFailed(exc.name, logfn, localdata), localdata) |
322 | return 1 | 327 | return 1 |
323 | finally: | 328 | finally: |
324 | sys.stdout.flush() | 329 | sys.stdout.flush() |
325 | sys.stderr.flush() | 330 | sys.stderr.flush() |
326 | 331 | ||
332 | bblogger.removeHandler(handler) | ||
333 | |||
327 | bb.event.useStdout = origstdout | 334 | bb.event.useStdout = origstdout |
328 | 335 | ||
329 | # Restore the backup fds | 336 | # Restore the backup fds |