Index: third_party/grpc/src/proto/gen_build_yaml.py |
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py b/third_party/grpc/src/proto/gen_build_yaml.py |
old mode 100644 |
new mode 100755 |
similarity index 54% |
copy from third_party/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py |
copy to third_party/grpc/src/proto/gen_build_yaml.py |
index 45a44472062142c01eea5ebb5781d00237bf6857..e243d0defc4b9f67201dd40b941e0399d3466455 |
--- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py |
+++ b/third_party/grpc/src/proto/gen_build_yaml.py |
@@ -1,4 +1,6 @@ |
-# Copyright (C) 2010 Google Inc. All rights reserved. |
+#!/usr/bin/env python2.7 |
+# Copyright 2015-2016, Google Inc. |
+# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions are |
@@ -26,27 +28,47 @@ |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-import sys |
-from webkitpy.common.system.executive import ScriptError |
-from webkitpy.tool.steps.options import Options |
+"""Generates the appropriate build.json data for all the proto files.""" |
+import yaml |
+import collections |
+import os |
+import re |
+import sys |
+def update_deps(key, proto_filename, deps, is_trans, visited): |
+ if not proto_filename in visited: |
+ visited.append(proto_filename) |
+ with open(proto_filename) as inp: |
+ for line in inp: |
+ imp = re.search(r'import "([^"]*)"', line) |
+ if not imp: continue |
+ imp_proto = imp.group(1) |
+ if key not in deps: deps[key] = [] |
+ deps[key].append(imp_proto[:-6]) |
+ if is_trans: |
+ update_deps(key, imp_proto, deps, is_trans, visited) |
-class AbstractStep(object): |
+def main(): |
+ proto_dir = os.path.abspath(os.path.dirname(sys.argv[0])) |
+ os.chdir(os.path.join(proto_dir, '../..')) |
- def __init__(self, tool, options): |
- self._tool = tool |
- self._options = options |
+ deps = {} |
+ deps_trans = {} |
+ for root, dirs, files in os.walk('src/proto'): |
+ for f in files: |
+ if f[-6:] != '.proto': continue |
+ look_at = os.path.join(root, f) |
+ deps_for = look_at[:-6] |
+ update_deps(deps_for, look_at, deps, False, []) # First level deps |
+ update_deps(deps_for, look_at, deps_trans, True, []) # Transitive deps |
- def _exit(self, code): |
- sys.exit(code) |
+ json = { |
+ 'proto_deps': deps, |
+ 'proto_transitive_deps': deps_trans |
+ } |
- @classmethod |
- def options(cls): |
- return [ |
- # We need this option here because cached_lookup uses it. :( |
- Options.git_commit, |
- ] |
+ print yaml.dump(json) |
- def run(self, state): |
- raise NotImplementedError, "subclasses must implement" |
+if __name__ == '__main__': |
+ main() |