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

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

Issue 1923203002: Clean net_test_support_data_sources and net_unittests_data_source. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@{interstitial}
Patch Set: Fix net/data/update_net_gypi.py and net/net.gypi Created 4 years, 7 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 | « no previous file | net/net.gypi » ('j') | no next file with comments »
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 sys
8
9 try:
10 import cStringIO as StringIO
eroman 2016/04/27 16:23:14 I would remove this and just import StringIO -- I
sdefresne 2016/04/30 12:31:40 Done.
11 except ImportError:
12 import StringIO
13
14
15 VARIABLE_PATTERN = re.compile("^(?P<indentation>\s*)'(?P<name>[^']*)':\s*\[$")
16 EXCLUSION_PATTERN = re.compile("^(?:README|OWNERS|.*\.(pyc?|sh))$")
eroman 2016/04/27 16:23:14 Can also exclude editor swap files: *.swp *~ Whe
sdefresne 2016/04/30 12:31:40 Done.
17
18 DATA_SOURCES_PATH_FOR_VARIABLES = {
19 "net_test_support_data_sources": [
20 "net/data/ssl/certificates",
21 ],
22 "net_unittests_data_sources": [
23 "net/data/certificate_policies_unittest",
24 "net/data/name_constraints_unittest",
25 "net/data/parse_certificate_unittest",
26 "net/data/parse_ocsp_unittest",
27 "net/data/test.html",
28 "net/data/url_request_unittest",
29 "net/data/verify_certificate_chain_unittest",
30 "net/data/verify_name_match_unittest/names",
31 "net/data/verify_signed_data_unittest",
32 "net/third_party/nist-pkits/certs",
33 "net/third_party/nist-pkits/crls",
34 ],
35 }
36
37
38 def RelativePath(dir, path):
eroman 2016/04/27 16:23:14 style: functions_are_like_this() -- https://google
sdefresne 2016/04/30 12:31:41 Done.
39 """Converts |path| to be relative to |dir|.
eroman 2016/04/27 16:23:14 Can you use os.path.relpath() ? Or alternately us
sdefresne 2016/04/30 12:31:40 Done.
40
41 Args:
42 dir: string, a directory path
43 path: string, path that should be converted to relative path.
44 """
45 if not dir or dir == os.path.curdir or os.path.isabs(path):
46 return path
47 if dir == os.path.pardir:
48 return os.path.join(dir, path)
49 if dir == path:
50 return os.path.curdir
51 if path.startswith(dir) and path[len(dir)] in (os.path.sep, os.path.altsep):
52 return path[len(dir) + 1:]
53 return os.path.join(os.path.pardir, RelativePath(os.path.dirname(dir), path))
54
55
56 def ListDataSources(root, paths, exclusion):
57 """Returns the list of data source found in |paths|.
58
59 Args:
60 root: string, path to the repository root
61 paths: list of string, paths relative to repository root
62 exclusion: compiled regular expression, filename matching this pattern
63 will be excluded from the result
64 """
65 data_sources = []
66 for path in paths:
67 fullpath = os.path.normpath(os.path.join(root, path))
68 if os.path.isfile(fullpath):
69 if not exclusion.match(os.path.basename(path)):
70 data_sources.append(path)
71 continue
72
73 for dirpath, dirnames, filenames in os.walk(fullpath):
74 for filename in filenames:
75 if not exclusion.match(filename):
76 data_sources.append(os.path.normpath(os.path.join(dirpath, filename)))
77 return data_sources
78
79
80 def FormatDataSources(name, dir, data_sources, indentation):
81 """Converts |data_sources| to a gyp variable assignment.
82
83 Args:
84 name: string, name of the variable
85 dir: string, path to the directory containing the gyp file
86 data_sources: list of filenames
87 indentation: string
88 """
89 buffer = StringIO.StringIO()
90 buffer.write("%s'%s': [\n" % (indentation, name))
91 for data_source in sorted(data_sources):
92 buffer.write(" %s'%s',\n" % (indentation, RelativePath(dir, data_source)))
93 buffer.write("%s],\n" % (indentation,))
94 return buffer.getvalue()
95
96
97 def EditFile(path, root, data_sources_for_variables):
98 """Updates file at |path| by rewriting variables values.
99
100 Args:
101 path: string, path of the file to edit
102 root: string, path to the repository root
103 data_sources_for_variables: dictionary mapping variable names to
104 the list of data sources to use
105 """
106 dir = RelativePath(root, os.path.dirname(path))
107 buffer = StringIO.StringIO()
108 with open(path, 'r') as file:
109 indentation = ""
110 current_var = None
111 for line in file:
112 if not current_var:
113 match = VARIABLE_PATTERN.match(line)
114 if not match:
115 buffer.write(line)
116 continue
117 variable = match.group('name')
118 if variable not in data_sources_for_variables:
119 buffer.write(line)
120 continue
121 current_var = variable
122 indentation = match.group('indentation')
123 buffer.write(FormatDataSources(
124 variable, dir, data_sources_for_variables[variable], indentation))
125 else:
126 if line == indentation + '],\n':
127 current_var = None
128 with open(path, 'w') as file:
129 file.write(buffer.getvalue())
eroman 2016/04/27 16:23:14 nit: I suggest including an output message from th
sdefresne 2016/04/30 12:31:41 Done.
130
131
132 def Main(args):
133 root_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), "../.."))
eroman 2016/04/27 16:23:14 nit: rather than "../../" would be more general to
sdefresne 2016/04/30 12:31:41 Done.
134 net_gypi = os.path.normpath(os.path.join(root_dir, "net/net.gypi"))
135
136 data_sources_for_variables = {}
137 for variable in DATA_SOURCES_PATH_FOR_VARIABLES:
138 data_sources_for_variables[variable] = ListDataSources(
139 root_dir, DATA_SOURCES_PATH_FOR_VARIABLES[variable], EXCLUSION_PATTERN)
140
141 EditFile(net_gypi, root_dir, data_sources_for_variables)
142
143
144 if __name__ == '__main__':
145 sys.exit(Main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | net/net.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698