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

Side by Side Diff: tools/metrics/histograms/pretty_print.py

Issue 925753002: Add pretty printing for rappor.xml (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 | « tools/metrics/common/presubmit_util.py ('k') | tools/metrics/rappor/OWNERS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Pretty-prints the histograms.xml file, alphabetizing tags, wrapping text 6 """Pretty-prints the histograms.xml file, alphabetizing tags, wrapping text
7 at 80 chars, enforcing standard attribute ordering, and standardizing 7 at 80 chars, enforcing standard attribute ordering, and standardizing
8 indentation. 8 indentation.
9 9
10 This is quite a bit more complicated than just calling tree.toprettyxml(); 10 This is quite a bit more complicated than just calling tree.toprettyxml();
(...skipping 10 matching lines...) Expand all
21 import xml.dom.minidom 21 import xml.dom.minidom
22 22
23 import print_style 23 import print_style
24 24
25 sys.path.insert(1, os.path.join(sys.path[0], '..', '..', 'python')) 25 sys.path.insert(1, os.path.join(sys.path[0], '..', '..', 'python'))
26 from google import path_utils 26 from google import path_utils
27 27
28 # Import the metrics/common module. 28 # Import the metrics/common module.
29 sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common')) 29 sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
30 import diff_util 30 import diff_util
31 import presubmit_util
31 32
32 # Tags whose children we want to alphabetize. The key is the parent tag name, 33 # Tags whose children we want to alphabetize. The key is the parent tag name,
33 # and the value is a pair of the tag name of the children we want to sort, 34 # and the value is a pair of the tag name of the children we want to sort,
34 # and a key function that maps each child node to the desired sort key. 35 # and a key function that maps each child node to the desired sort key.
35 ALPHABETIZATION_RULES = { 36 ALPHABETIZATION_RULES = {
36 'histograms': ('histogram', lambda n: n.attributes['name'].value.lower()), 37 'histograms': ('histogram', lambda n: n.attributes['name'].value.lower()),
37 'enums': ('enum', lambda n: n.attributes['name'].value.lower()), 38 'enums': ('enum', lambda n: n.attributes['name'].value.lower()),
38 'enum': ('int', lambda n: int(n.attributes['value'].value)), 39 'enum': ('int', lambda n: int(n.attributes['value'].value)),
39 'histogram_suffixes_list': ( 40 'histogram_suffixes_list': (
40 'histogram_suffixes', lambda n: n.attributes['name'].value.lower()), 41 'histogram_suffixes', lambda n: n.attributes['name'].value.lower()),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 Args: 124 Args:
124 raw_xml: The contents of the histograms XML file, as a string. 125 raw_xml: The contents of the histograms XML file, as a string.
125 126
126 Returns: 127 Returns:
127 The pretty-printed version. 128 The pretty-printed version.
128 """ 129 """
129 tree = xml.dom.minidom.parseString(raw_xml) 130 tree = xml.dom.minidom.parseString(raw_xml)
130 tree = TransformByAlphabetizing(tree) 131 tree = TransformByAlphabetizing(tree)
131 return print_style.GetPrintStyle().PrettyPrintNode(tree) 132 return print_style.GetPrintStyle().PrettyPrintNode(tree)
132 133
133
134 def main(): 134 def main():
135 logging.basicConfig(level=logging.INFO) 135 presubmit_util.DoPresubmitMain(sys.argv, 'histograms.xml',
136 136 'histograms.before.pretty-print.xml',
137 presubmit = ('--presubmit' in sys.argv) 137 'pretty_print.py', PrettyPrint)
138
139 histograms_filename = 'histograms.xml'
140 histograms_backup_filename = 'histograms.before.pretty-print.xml'
141
142 # If there is a histograms.xml in the current working directory, use that.
143 # Otherwise, use the one residing in the same directory as this script.
144 histograms_dir = os.getcwd()
145 if not os.path.isfile(os.path.join(histograms_dir, histograms_filename)):
146 histograms_dir = path_utils.ScriptDir()
147
148 histograms_pathname = os.path.join(histograms_dir, histograms_filename)
149 histograms_backup_pathname = os.path.join(histograms_dir,
150 histograms_backup_filename)
151
152 logging.info('Loading %s...' % os.path.relpath(histograms_pathname))
153 with open(histograms_pathname, 'rb') as f:
154 xml = f.read()
155
156 # Check there are no CR ('\r') characters in the file.
157 if '\r' in xml:
158 logging.info('DOS-style line endings (CR characters) detected - these are '
159 'not allowed. Please run dos2unix %s' % histograms_filename)
160 sys.exit(1)
161
162 logging.info('Pretty-printing...')
163 try:
164 pretty = PrettyPrint(xml)
165 except Error:
166 logging.error('Aborting parsing due to fatal errors.')
167 sys.exit(1)
168
169 if xml == pretty:
170 logging.info('%s is correctly pretty-printed.' % histograms_filename)
171 sys.exit(0)
172 if presubmit:
173 logging.info('%s is not formatted correctly; run pretty_print.py to fix.' %
174 histograms_filename)
175 sys.exit(1)
176 if not diff_util.PromptUserToAcceptDiff(
177 xml, pretty,
178 'Is the prettified version acceptable?'):
179 logging.error('Aborting')
180 return
181
182 logging.info('Creating backup file %s' % histograms_backup_filename)
183 shutil.move(histograms_pathname, histograms_backup_pathname)
184
185 logging.info('Writing new %s file' % histograms_filename)
186 with open(histograms_pathname, 'wb') as f:
187 f.write(pretty)
188
189 138
190 if __name__ == '__main__': 139 if __name__ == '__main__':
191 main() 140 main()
OLDNEW
« no previous file with comments | « tools/metrics/common/presubmit_util.py ('k') | tools/metrics/rappor/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698