add logging level capability. restrict to error+info by default. use --verbose/-v, or log_level=2 in the spec for increasing to debug, and show command output.

This commit is contained in:
Mathieu Virbel 2012-12-21 02:00:29 +01:00
parent bc279d1839
commit f297fd5ac2
4 changed files with 41 additions and 14 deletions

View file

@ -54,7 +54,7 @@ Usage
::
Usage: buildozer [target] [command1] [command2]
Usage: buildozer [--verbose] [target] [command1] [command2]
Available targets:
android Android target, based on python-for-android project

View file

@ -43,6 +43,7 @@ class Buildozer(object):
def __init__(self, filename='buildozer.spec', target=None):
super(Buildozer, self).__init__()
self.log_level = 1
self.environ = {}
self.specfilename = filename
self.state = None
@ -51,6 +52,12 @@ class Buildozer(object):
self.config.getdefault = self._get_config_default
self.config.read(filename)
try:
self.log_level = int(self.config.getdefault(
'buildozer', 'log_level', '1'))
except:
pass
self.check_configuration_tokens()
self.targetname = None
@ -111,6 +118,8 @@ class Buildozer(object):
self.target._build_done = True
def log(self, level, msg):
if level > self.log_level:
return
if USE_COLOR:
color = COLOR_SEQ.format(30 + LOG_LEVELS_C[level])
print ''.join((RESET_SEQ, color, '# ', msg, RESET_SEQ))
@ -141,9 +150,6 @@ class Buildozer(object):
#print ' '.join(['{0}={1}'.format(*args) for args in
# self.environ.iteritems()])
get_stdout = kwargs.pop('get_stdout', False)
get_stderr = kwargs.pop('get_stderr', False)
# prepare the environ, based on the system + our own env
env = copy(environ)
env.update(self.environ)
@ -154,6 +160,12 @@ class Buildozer(object):
kwargs.setdefault('stderr', PIPE)
kwargs.setdefault('close_fds', True)
kwargs.setdefault('shell', True)
kwargs.setdefault('show_output', self.log_level > 1)
show_output = kwargs.pop('show_output')
get_stdout = kwargs.pop('get_stdout', False)
get_stderr = kwargs.pop('get_stderr', False)
self.debug('Run %r' % command)
# open the process
@ -179,14 +191,16 @@ class Buildozer(object):
break
if get_stdout:
ret_stdout.append(chunk)
stdout.write(chunk)
if show_output:
stdout.write(chunk)
if fd_stderr in readx:
chunk = process.stderr.read()
if chunk == '':
break
if get_stderr:
ret_stderr.append(chunk)
stderr.write(chunk)
if show_output:
stderr.write(chunk)
stdout.flush()
stderr.flush()
@ -412,7 +426,7 @@ class Buildozer(object):
pass
def usage(self):
print 'Usage: buildozer [target] [command1] [command2]'
print 'Usage: buildozer [--verbose] [target] [command1] [command2]'
print
print 'Available targets:'
targets = list(self.targets())
@ -464,13 +478,21 @@ class Buildozer(object):
self.run_command(cmd)
def run_command(self, args):
if '-h' in args or '--help' in args:
self.usage()
exit(0)
while args:
if not args[0].startswith('-'):
break
arg = args.pop(0)
if '--version' in args:
print 'Buildozer {0}'.format(__version__)
exit(0)
if arg in ('-v', '--verbose'):
self.log_level = 2
if arg in ('-h', '--help'):
self.usage()
exit(0)
if args == '--version':
print 'Buildozer {0}'.format(__version__)
exit(0)
if not args:
self.run_default()

View file

@ -56,3 +56,7 @@ requirements = twisted,kivy
# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 1

View file

@ -394,7 +394,8 @@ class TargetAndroid(Target):
'''
self.check_requirements()
self.buildozer.cmd('{adb} logcat'.format(adb=self.adb_cmd),
cwd=self.buildozer.global_platform_dir)
cwd=self.buildozer.global_platform_dir,
show_output=True)