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

Unified Diff: runtime/PRESUBMIT.py

Issue 9213019: Accommodate git repositories when re-rooting the cpplint invocation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/PRESUBMIT.py
diff --git a/runtime/PRESUBMIT.py b/runtime/PRESUBMIT.py
index c3bf724daae845202487ebaa656701c66ce5d2f9..7c76202e446caf4f6412bd6b34c4a15d8f731f51 100644
--- a/runtime/PRESUBMIT.py
+++ b/runtime/PRESUBMIT.py
@@ -2,8 +2,54 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
-import cpplint
import os
+import cpplint
+
+
+class PathHackException(Exception):
+ def __init__(self, error_msg):
+ self.error_msg = error_msg
+
+ def __str__(self):
+ return repr(self.error_msg)
+
+
+def TrySvnPathHack(parent_path):
+ orig_path = os.path.join(parent_path, '.svn')
+ renamed_path = os.path.join(parent_path, '.svn_orig')
+ if os.path.exists(renamed_path):
+ error_msg = '".svn_orig" exists in presubmit parent directory('
+ error_msg += parent_path
+ error_msg += '). Consider renaming it manually to ".svn".'
+ raise PathHackException(error_msg)
+ if os.path.exists(orig_path):
+ # Make the parent SVN directory non-discoverable by cpplint to get
+ # the correct header guard checks. This is needed if using all Dart
+ # checkout.
+ os.rename(orig_path, renamed_path)
+ return lambda: os.rename(renamed_path, orig_path)
+
+
+def TryGitPathHack(filename, parent_path):
+ def CommonSubdirectory(parent, child):
+ while len(child) > len(parent):
+ child, tail = os.path.split(child)
+ if child == parent:
+ return os.path.join(parent, tail)
+ if os.path.exists(os.path.join(parent_path, '.git')):
+ runtime_path = CommonSubdirectory(parent_path, filename)
+ if runtime_path is not None:
+ fake_svn_path = os.path.join(runtime_path, '.svn')
+ if os.path.exists(fake_svn_path):
+ error_msg = '".svn" exists in presubmit parent subdirectory('
+ error_msg += fake_svn_path
+ error_msg += '). Consider removing it manually.'
+ raise PathHackException(error_msg)
+ # Deposit a file named ".svn" in the runtime directory to fool
+ # cpplint into thinking it is the source root.
+ open(fake_svn_path, 'w').close()
+ return lambda: os.remove(fake_svn_path)
+
def RunLint(input_api, output_api):
result = []
@@ -12,35 +58,28 @@ def RunLint(input_api, output_api):
for svn_file in input_api.AffectedTextFiles():
filename = svn_file.AbsoluteLocalPath()
if filename.endswith('.cc') or filename.endswith('.h'):
- hacked_parent_svn = 0
- if filename.endswith('.h'):
- parent_path = os.path.dirname(input_api.PresubmitLocalPath())
- orig_path = os.path.join(parent_path, '.svn')
- renamed_path = os.path.join(parent_path, '.svn_orig')
- if (os.path.exists(renamed_path)):
- error_msg = '".svn_orig" exists in presubmit parent directory('
- error_msg += parent_path
- error_msg += '). Consider renaming it manually to ".svn".'
- result = [output_api.PresubmitError(error_msg)]
- return result
- if (os.path.exists(orig_path)):
- # Make the parent SVN directory non-discoverable by cpplint to get
- # the correct header guard checks. This is needed if using all Dart
- # checkout.
- os.rename(orig_path, renamed_path)
- hacked_parent_svn = 1
+ cleanup = None
+ parent_path = os.path.dirname(input_api.PresubmitLocalPath())
+ try:
+ if filename.endswith('.h'):
+ cleanup = TrySvnPathHack(parent_path)
+ if cleanup is None:
+ cleanup = TryGitPathHack(filename, parent_path)
+ except PathHackException, exception:
+ return [output_api.PresubmitError(str(exception))]
# Run cpplint on the file.
cpplint.ProcessFile(filename, 1)
- if hacked_parent_svn != 0:
- # Undo hacks from above: Restore the original name.
- os.rename(renamed_path, orig_path)
+ if cleanup is not None:
+ cleanup()
# Report a presubmit error if any of the files had an error.
if cpplint._cpplint_state.error_count > 0:
result = [output_api.PresubmitError('Failed cpplint check.')]
return result
+
def CheckChangeOnUpload(input_api, output_api):
return RunLint(input_api, output_api)
+
def CheckChangeOnCommit(input_api, output_api):
return RunLint(input_api, output_api)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698