Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: net/data/update_net_gypi.py

Issue 2641413003: net/QUIC: inline gypi file into BUILD.gn file and upstream proto-quic. (Closed)
Patch Set: Fix some leaked typos from proto-quic. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/BUILD.gn ('k') | net/features.gni » ('j') | net/net.gypi » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import os
6 import re
7 import StringIO
8 import sys
9
10
11 VARIABLE_PATTERN = re.compile("^(?P<indentation>\s*)'(?P<name>[^']*)':\s*\[$")
12 EXCLUSION_PATTERN = re.compile("^(?:README|OWNERS|.*\.(pyc?|sh|swp)|.*~)$")
13
14 DATA_SOURCES_PATH_FOR_VARIABLES = {
15 "net_test_support_data_sources": [
16 "net/data/ssl/certificates",
17 ],
18 "net_unittests_data_sources": [
19 "net/data/cert_issuer_source_aia_unittest",
20 "net/data/cert_issuer_source_static_unittest",
21 "net/data/certificate_policies_unittest",
22 "net/data/filter_unittests",
23 "net/data/name_constraints_unittest",
24 "net/data/parse_certificate_unittest",
25 "net/data/parse_ocsp_unittest",
26 "net/data/test.html",
27 "net/data/url_request_unittest",
28 "net/data/verify_certificate_chain_unittest",
29 "net/data/verify_name_match_unittest/names",
30 "net/data/verify_signed_data_unittest",
31 "net/third_party/nist-pkits/certs",
32 "net/third_party/nist-pkits/crls",
33 ],
34 }
35
36
37 def list_data_sources(root, paths, exclusion):
38 """Returns the list of data source found in |paths|.
39
40 Args:
41 root: string, path to the repository root
42 paths: list of string, paths relative to repository root
43 exclusion: compiled regular expression, filename matching this pattern
44 will be excluded from the result
45 """
46 data_sources = []
47 for path in paths:
48 fullpath = os.path.normpath(os.path.join(root, path))
49 if os.path.isfile(fullpath):
50 if not exclusion.match(os.path.basename(path)):
51 data_sources.append(path)
52 continue
53
54 for dirpath, dirnames, filenames in os.walk(fullpath):
55 for filename in filenames:
56 if not exclusion.match(filename):
57 data_sources.append(os.path.normpath(os.path.join(dirpath, filename)))
58 return data_sources
59
60
61 def format_data_sources(name, dir, data_sources, indentation):
62 """Converts |data_sources| to a gyp variable assignment.
63
64 Args:
65 name: string, name of the variable
66 dir: string, path to the directory containing the gyp file
67 data_sources: list of filenames
68 indentation: string
69 """
70 buffer = StringIO.StringIO()
71 buffer.write("%s'%s': [\n" % (indentation, name))
72 for data_source in sorted(data_sources):
73 buffer.write(" %s'%s',\n" % (
74 indentation, os.path.relpath(data_source, dir)))
75 buffer.write("%s],\n" % (indentation,))
76 return buffer.getvalue()
77
78
79 def save_file_if_changed(path, content):
80 """Writes |content| to file at |path| if file has changed.
81
82 Args:
83 path: string, path of the file to save
84 content: string, content to write to file
85 """
86 with open(path, "r") as file:
87 old_content = file.read()
88 if content != old_content:
89 with open(path, "w") as file:
90 file.write(content)
91 sys.stdout.write("updated %s, do not forget to run 'git add'\n" % (path,))
92
93
94 def edit_file(path, root, data_sources_for_variables):
95 """Updates file at |path| by rewriting variables values.
96
97 Args:
98 path: string, path of the file to edit
99 root: string, path to the repository root
100 data_sources_for_variables: dictionary mapping variable names to
101 the list of data sources to use
102 """
103 dir = os.path.relpath(os.path.dirname(path), root)
104 buffer = StringIO.StringIO()
105 with open(path, "r") as file:
106 indentation = ""
107 current_var = None
108 for line in file:
109 if not current_var:
110 match = VARIABLE_PATTERN.match(line)
111 if not match:
112 buffer.write(line)
113 continue
114 variable = match.group("name")
115 if variable not in data_sources_for_variables:
116 buffer.write(line)
117 continue
118 current_var = variable
119 indentation = match.group("indentation")
120 buffer.write(format_data_sources(
121 variable, dir, data_sources_for_variables[variable], indentation))
122 else:
123 if line == indentation + "],\n":
124 current_var = None
125 save_file_if_changed(path, buffer.getvalue())
126
127
128 def main(args):
129 root_dir = os.path.normpath(os.path.join(
130 os.path.dirname(__file__), os.pardir, os.pardir))
131 net_gypi = os.path.normpath(os.path.join(root_dir, "net", "net.gypi"))
132
133 data_sources_for_variables = {}
134 for variable in DATA_SOURCES_PATH_FOR_VARIABLES:
135 data_sources_for_variables[variable] = list_data_sources(
136 root_dir, DATA_SOURCES_PATH_FOR_VARIABLES[variable], EXCLUSION_PATTERN)
137
138 edit_file(net_gypi, root_dir, data_sources_for_variables)
139
140
141 if __name__ == "__main__":
142 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « net/BUILD.gn ('k') | net/features.gni » ('j') | net/net.gypi » ('J')

Powered by Google App Engine
This is Rietveld 408576698