| 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()
|
|
|