OLD | NEW |
---|---|
(Empty) | |
1 #!/usr/bin/env python | |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import argparse | |
7 import re | |
8 import sys | |
9 import os | |
10 import logging | |
11 | |
12 # TODO(eseidel): This should be shared with tools/android_stack_parser/stack | |
13 # TODO(eseidel): This could be replaced by using build-ids on Android | |
14 # TODO(eseidel): mojo_shell should write out a cache mapping file. | |
15 def main(): | |
16 logging.basicConfig(level=logging.WARN) | |
17 parser = argparse.ArgumentParser( | |
18 description='Watches mojo_shell logcat output and builds a directory' | |
19 'of symlinks to symboled binaries for seen cache names.') | |
20 parser.add_argument('links_dir', type=str) | |
21 parser.add_argument('symbols_dir', type=str) | |
22 parser.add_argument('base_url', type=str) | |
23 args = parser.parse_args() | |
24 | |
25 regex = re.compile('Caching mojo app (?P<url>\S+) at (?P<path>\S+)') | |
26 | |
27 if not os.path.isdir(args.links_dir): | |
28 logging.fatal('links_dir: %s is not a directory' % args.links_dir) | |
29 sys.exit(2) | |
30 | |
31 for line in sys.stdin: | |
32 result = regex.search(line) | |
33 if not result: | |
34 continue | |
35 | |
36 url = result.group('url') | |
37 if not url.startswith(args.base_url): | |
38 logging.info('%s does not match base %s' % (url, args.base_url)) | |
qsr
2015/01/16 00:04:18
This is kind of expected if you run the shell mult
eseidel
2015/01/16 00:14:06
Done.
qsr
2015/01/16 00:46:40
Doesn't see to have changed...
| |
39 continue | |
40 full_name = os.path.basename(url) | |
41 name, ext = os.path.splitext(full_name) | |
42 if ext != '.mojo': | |
43 logging.info('%s is not a .mojo library' % url) | |
44 continue | |
45 | |
46 symboled_name = 'lib%s_library.so' % name | |
47 cache_link_path = os.path.join(args.links_dir, | |
48 os.path.basename(result.group('path'))) | |
49 symboled_path = os.path.realpath( | |
50 os.path.join(args.symbols_dir, symboled_name)) | |
51 if not os.path.isfile(symboled_path): | |
52 logging.warn('symboled path %s does not exist' % symboled_path) | |
53 continue | |
54 | |
55 print "%s -> %s" % (cache_link_path, symboled_path) | |
56 | |
57 if os.path.lexists(cache_link_path): | |
58 logging.info('link already exists %s, replacing' % symboled_path) | |
59 os.unlink(cache_link_path) | |
60 | |
61 os.symlink(symboled_path, cache_link_path) | |
62 | |
63 if __name__ == '__main__': | |
64 main() | |
OLD | NEW |