Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 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 """Enables directory-specific presubmit checks to run at upload and/or commit. | 6 """Enables directory-specific presubmit checks to run at upload and/or commit. |
| 7 """ | 7 """ |
| 8 | 8 |
| 9 __version__ = '1.3' | 9 __version__ = '1.3.1' |
| 10 | 10 |
| 11 # TODO(joi) Add caching where appropriate/needed. The API is designed to allow | 11 # TODO(joi) Add caching where appropriate/needed. The API is designed to allow |
| 12 # caching (between all different invocations of presubmit scripts for a given | 12 # caching (between all different invocations of presubmit scripts for a given |
| 13 # change). We should add it as our presubmit scripts start feeling slow. | 13 # change). We should add it as our presubmit scripts start feeling slow. |
| 14 | 14 |
| 15 import cPickle # Exposed through the API. | 15 import cPickle # Exposed through the API. |
| 16 import cStringIO # Exposed through the API. | 16 import cStringIO # Exposed through the API. |
| 17 import exceptions | 17 import exceptions |
| 18 import fnmatch | 18 import fnmatch |
| 19 import glob | 19 import glob |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 the AffectedFile instance of the current file; | 264 the AffectedFile instance of the current file; |
| 265 integer line number (1-based); and | 265 integer line number (1-based); and |
| 266 the contents of the line as a string. | 266 the contents of the line as a string. |
| 267 | 267 |
| 268 Note: The cariage return (LF or CR) is stripped off. | 268 Note: The cariage return (LF or CR) is stripped off. |
| 269 """ | 269 """ |
| 270 return InputApi._RightHandSideLinesImpl( | 270 return InputApi._RightHandSideLinesImpl( |
| 271 filter(lambda x: x.IsTextFile(), | 271 filter(lambda x: x.IsTextFile(), |
| 272 self.AffectedFiles(include_deletes=False))) | 272 self.AffectedFiles(include_deletes=False))) |
| 273 | 273 |
| 274 def ReadFile(self, file, mode='r'): | |
| 275 """Reads an arbitrary file. | |
| 276 | |
| 277 Deny reading anything outside the repository.""" | |
|
Jói Sigurðsson
2009/06/08 10:52:50
For consistency with the rest of the code, please
| |
| 278 if isinstance(file, AffectedFile): | |
| 279 file = file.AbsoluteLocalPath() | |
| 280 if not file.startswith(self.change.RepositoryRoot()): | |
| 281 raise IOError('Access outside the repository root is denied.') | |
| 282 return gcl.ReadFile(file, mode) | |
| 283 | |
| 274 @staticmethod | 284 @staticmethod |
| 275 def _RightHandSideLinesImpl(affected_files): | 285 def _RightHandSideLinesImpl(affected_files): |
| 276 """Implements RightHandSideLines for InputApi and GclChange.""" | 286 """Implements RightHandSideLines for InputApi and GclChange.""" |
| 277 for af in affected_files: | 287 for af in affected_files: |
| 278 lines = af.NewContents() | 288 lines = af.NewContents() |
| 279 line_number = 0 | 289 line_number = 0 |
| 280 for line in lines: | 290 for line in lines: |
| 281 line_number += 1 | 291 line_number += 1 |
| 282 yield (af, line_number, line) | 292 yield (af, line_number, line) |
| 283 | 293 |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 734 return not DoPresubmitChecks(gcl.ChangeInfo('No name', 0, 0, '', files), | 744 return not DoPresubmitChecks(gcl.ChangeInfo('No name', 0, 0, '', files), |
| 735 options.commit, | 745 options.commit, |
| 736 options.verbose, | 746 options.verbose, |
| 737 sys.stdout, | 747 sys.stdout, |
| 738 sys.stdin, | 748 sys.stdin, |
| 739 default_presubmit=None) | 749 default_presubmit=None) |
| 740 | 750 |
| 741 | 751 |
| 742 if __name__ == '__main__': | 752 if __name__ == '__main__': |
| 743 sys.exit(Main(sys.argv)) | 753 sys.exit(Main(sys.argv)) |
| OLD | NEW |