Chromium Code Reviews| Index: sky/tools/mojo_cache_linker.py |
| diff --git a/sky/tools/mojo_cache_linker.py b/sky/tools/mojo_cache_linker.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..06c1d2421a8176030f9bbd2c6c612e34ea20999b |
| --- /dev/null |
| +++ b/sky/tools/mojo_cache_linker.py |
| @@ -0,0 +1,64 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2015 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +import argparse |
| +import re |
| +import sys |
| +import os |
| +import logging |
|
qsr
2015/01/16 19:22:46
alphabetize
|
| + |
| +# TODO(eseidel): This should be shared with tools/android_stack_parser/stack |
| +# TODO(eseidel): This could be replaced by using build-ids on Android |
| +# TODO(eseidel): mojo_shell should write out a cache mapping file. |
| +def main(): |
| + logging.basicConfig(level=logging.INFO) |
| + parser = argparse.ArgumentParser( |
| + description='Watches mojo_shell logcat output and builds a directory ' |
| + 'of symlinks to symboled binaries for seen cache names.') |
| + parser.add_argument('links_dir', type=str) |
| + parser.add_argument('symbols_dir', type=str) |
| + parser.add_argument('base_url', type=str) |
| + args = parser.parse_args() |
| + |
| + regex = re.compile('Caching mojo app (?P<url>\S+) at (?P<path>\S+)') |
| + |
| + if not os.path.isdir(args.links_dir): |
| + logging.fatal('links_dir: %s is not a directory' % args.links_dir) |
| + sys.exit(1) |
| + |
| + for line in sys.stdin: |
| + result = regex.search(line) |
| + if not result: |
| + continue |
| + |
| + url = result.group('url') |
| + if not url.startswith(args.base_url): |
| + logging.debug('%s does not match base %s' % (url, args.base_url)) |
| + continue |
| + full_name = os.path.basename(url) |
| + name, ext = os.path.splitext(full_name) |
| + if ext != '.mojo': |
| + logging.debug('%s is not a .mojo library' % url) |
| + continue |
| + |
| + symboled_name = 'lib%s_library.so' % name |
| + cache_link_path = os.path.join(args.links_dir, |
| + os.path.basename(result.group('path'))) |
| + symboled_path = os.path.realpath( |
| + os.path.join(args.symbols_dir, symboled_name)) |
| + if not os.path.isfile(symboled_path): |
| + logging.warn('symboled path %s does not exist' % symboled_path) |
| + continue |
| + |
| + print "%s -> %s" % (cache_link_path, symboled_path) |
| + |
| + if os.path.lexists(cache_link_path): |
| + logging.debug('link already exists %s, replacing' % symboled_path) |
| + os.unlink(cache_link_path) |
| + |
| + os.symlink(symboled_path, cache_link_path) |
| + |
| +if __name__ == '__main__': |
| + main() |