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

Unified Diff: tools/metrics/common/presubmit_util.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/metrics/common/models.py ('k') | tools/metrics/histograms/pretty_print.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/metrics/common/presubmit_util.py
diff --git a/tools/metrics/common/presubmit_util.py b/tools/metrics/common/presubmit_util.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc05d15f9198cfbf5cbfb8b0916c2a699af4f58d
--- /dev/null
+++ b/tools/metrics/common/presubmit_util.py
@@ -0,0 +1,79 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+import logging
+import shutil
+
+import diff_util
+
+sys.path.insert(1, os.path.join(sys.path[0], '..', '..', 'python'))
+from google import path_utils
+
+def DoPresubmitMain(argv, original_filename, backup_filename, script_name,
+ prettyFn):
+ """Execute presubmit/pretty printing for the target file.
+
+ Args:
+ argv: command line arguments
+ original_filename: The filename to read from.
+ backup_filename: When pretty printing, move the old file contents here.
+ script_name: The name of the script to run for pretty printing.
+ prettyFn: A function which takes the original xml content and produces
+ pretty printed xml.
+
+ Returns:
+ An exit status. Non-zero indicates errors.
+ """
+ logging.basicConfig(level=logging.INFO)
+ presubmit = ('--presubmit' in argv)
+
+ # If there is a description xml in the current working directory, use that.
+ # Otherwise, use the one residing in the same directory as this script.
+ xml_dir = os.getcwd()
+ if not os.path.isfile(os.path.join(xml_dir, original_filename)):
+ xml_dir = path_utils.ScriptDir()
+
+ xml_path = os.path.join(xml_dir, original_filename)
+
+ # Save the original file content.
+ logging.info('Loading %s...', os.path.relpath(xml_path))
+ with open(xml_path, 'rb') as f:
+ original_xml = f.read()
+
+ # Check there are no CR ('\r') characters in the file.
+ if '\r' in original_xml:
+ logging.error('DOS-style line endings (CR characters) detected - these are '
+ 'not allowed. Please run dos2unix %s', original_filename)
+ return 1
+
+ try:
+ pretty = prettyFn(original_xml)
+ except Error:
+ logging.error('Aborting parsing due to fatal errors.')
+ return 1
+
+ if original_xml == pretty:
+ logging.info('%s is correctly pretty-printed.', original_filename)
+ return 0
+ if presubmit:
+ logging.error('%s is not formatted correctly; run %s to fix.',
+ original_filename, script_name)
+ return 1
+
+ # Prompt user to consent on the change.
+ if not diff_util.PromptUserToAcceptDiff(
+ original_xml, pretty, 'Is the new version acceptable?'):
+ logging.error('Diff not accepted. Aborting.')
+ return 1
+
+ logging.info('Creating backup file: %s', backup_filename)
+ shutil.move(xml_path, os.path.join(xml_dir, backup_filename))
+
+ with open(xml_path, 'wb') as f:
+ f.write(pretty)
+ logging.info('Updated %s. Don\'t forget to add it to your changelist',
+ xml_path)
+ return 0
« no previous file with comments | « tools/metrics/common/models.py ('k') | tools/metrics/histograms/pretty_print.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698