15 """Generates the appropriate build.json data for all the proto files."""
24 def update_deps(key, proto_filename, deps, deps_external, is_trans, visited):
25 if not proto_filename
in visited:
26 visited.append(proto_filename)
27 with open(proto_filename)
as inp:
29 imp = re.search(
r'import "([^"]*)"', line)
32 imp_proto = imp.group(1)
35 if imp_proto.startswith(
'google/'):
36 if key
not in deps_external:
37 deps_external[key] = []
38 deps_external[key].append(imp_proto[:-6])
42 if imp_proto.startswith(
'third_party/grpc'):
43 imp_proto = imp_proto[17:]
46 deps[key].append(imp_proto[:-6])
48 update_deps(key, imp_proto, deps, deps_external, is_trans,
53 proto_dir = os.path.abspath(os.path.dirname(sys.argv[0]))
54 os.chdir(os.path.join(proto_dir,
'../..'))
59 deps_external_trans = {}
60 for root, dirs, files
in os.walk(
'src/proto'):
62 if f[-6:] !=
'.proto':
64 look_at = os.path.join(root, f)
65 deps_for = look_at[:-6]
67 update_deps(deps_for, look_at, deps, deps_external,
False, [])
69 update_deps(deps_for, look_at, deps_trans, deps_external_trans,
74 'proto_transitive_deps': deps_trans,
75 'proto_external_deps': deps_external,
76 'proto_transitive_external_deps': deps_external_trans
79 print(yaml.dump(json))
82 if __name__ ==
'__main__':