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

Side by Side Diff: presubmit_support.py

Issue 113354: Add more presubmit support. Add PRESUBMIT.py to depot_tools.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 11 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 | Annotate | Revision Log
« no previous file with comments | « PRESUBMIT.py ('k') | tests/__init__.py » ('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/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.0.1' 9 __version__ = '1.0.1'
10 10
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 self.marshal = marshal 174 self.marshal = marshal
175 self.re = re 175 self.re = re
176 self.subprocess = subprocess 176 self.subprocess = subprocess
177 self.tempfile = tempfile 177 self.tempfile = tempfile
178 self.urllib2 = urllib2 178 self.urllib2 = urllib2
179 179
180 # InputApi.platform is the platform you're currently running on. 180 # InputApi.platform is the platform you're currently running on.
181 self.platform = sys.platform 181 self.platform = sys.platform
182 182
183 # The local path of the currently-being-processed presubmit script. 183 # The local path of the currently-being-processed presubmit script.
184 self.current_presubmit_path = presubmit_path 184 self._current_presubmit_path = os.path.dirname(presubmit_path)
185 185
186 # We carry the canned checks so presubmit scripts can easily use them. 186 # We carry the canned checks so presubmit scripts can easily use them.
187 self.canned_checks = presubmit_canned_checks 187 self.canned_checks = presubmit_canned_checks
188 188
189 def PresubmitLocalPath(self): 189 def PresubmitLocalPath(self):
190 """Returns the local path of the presubmit script currently being run. 190 """Returns the local path of the presubmit script currently being run.
191 191
192 This is useful if you don't want to hard-code absolute paths in the 192 This is useful if you don't want to hard-code absolute paths in the
193 presubmit script. For example, It can be used to find another file 193 presubmit script. For example, It can be used to find another file
194 relative to the PRESUBMIT.py script, so the whole tree can be branched and 194 relative to the PRESUBMIT.py script, so the whole tree can be branched and
195 the presubmit script still works, without editing its content. 195 the presubmit script still works, without editing its content.
196 """ 196 """
197 return self.current_presubmit_path 197 return self._current_presubmit_path
198 198
199 @staticmethod 199 @staticmethod
200 def DepotToLocalPath(depot_path): 200 def DepotToLocalPath(depot_path):
201 """Translate a depot path to a local path (relative to client root). 201 """Translate a depot path to a local path (relative to client root).
202 202
203 Args: 203 Args:
204 Depot path as a string. 204 Depot path as a string.
205 205
206 Returns: 206 Returns:
207 The local path of the depot path under the user's current client, or None 207 The local path of the depot path under the user's current client, or None
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 if not mime_type or mime_type.startswith('text/'): 251 if not mime_type or mime_type.startswith('text/'):
252 output_files.append(af) 252 output_files.append(af)
253 return output_files 253 return output_files
254 254
255 def AffectedFiles(self, include_dirs=False, include_deletes=True): 255 def AffectedFiles(self, include_dirs=False, include_deletes=True):
256 """Same as input_api.change.AffectedFiles() except only lists files 256 """Same as input_api.change.AffectedFiles() except only lists files
257 (and optionally directories) in the same directory as the current presubmit 257 (and optionally directories) in the same directory as the current presubmit
258 script, or subdirectories thereof. 258 script, or subdirectories thereof.
259 """ 259 """
260 output_files = [] 260 output_files = []
261 dir_with_slash = normpath( 261 dir_with_slash = normpath("%s/" % self.PresubmitLocalPath())
262 "%s/" % os.path.dirname(self.current_presubmit_path))
263 if len(dir_with_slash) == 1: 262 if len(dir_with_slash) == 1:
264 dir_with_slash = '' 263 dir_with_slash = ''
265 for af in self.change.AffectedFiles(include_dirs, include_deletes): 264 for af in self.change.AffectedFiles(include_dirs, include_deletes):
266 af_path = normpath(af.LocalPath()) 265 af_path = normpath(af.LocalPath())
267 if af_path.startswith(dir_with_slash): 266 if af_path.startswith(dir_with_slash):
268 output_files.append(af) 267 output_files.append(af)
269 return output_files 268 return output_files
270 269
271 def LocalPaths(self, include_dirs=False): 270 def LocalPaths(self, include_dirs=False):
272 """Returns local paths of input_api.AffectedFiles().""" 271 """Returns local paths of input_api.AffectedFiles()."""
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 622
624 Return: 623 Return:
625 True if execution can continue, False if not. 624 True if execution can continue, False if not.
626 """ 625 """
627 presubmit_files = ListRelevantPresubmitFiles(change_info.FileList()) 626 presubmit_files = ListRelevantPresubmitFiles(change_info.FileList())
628 if not presubmit_files and verbose: 627 if not presubmit_files and verbose:
629 print "Warning, no presubmit.py found." 628 print "Warning, no presubmit.py found."
630 results = [] 629 results = []
631 executer = PresubmitExecuter(change_info, committing) 630 executer = PresubmitExecuter(change_info, committing)
632 for filename in presubmit_files: 631 for filename in presubmit_files:
632 filename = os.path.abspath(filename)
633 if verbose: 633 if verbose:
634 print "Running %s" % filename 634 print "Running %s" % filename
635 # Accept CRLF presubmit script. 635 # Accept CRLF presubmit script.
636 presubmit_script = gcl.ReadFile(filename, 'rU') 636 presubmit_script = gcl.ReadFile(filename, 'rU')
637 results += executer.ExecPresubmitScript(presubmit_script, filename) 637 results += executer.ExecPresubmitScript(presubmit_script, filename)
638 638
639 errors = [] 639 errors = []
640 notifications = [] 640 notifications = []
641 warnings = [] 641 warnings = []
642 for result in results: 642 for result in results:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 print "Found %d files." % len(files) 703 print "Found %d files." % len(files)
704 return DoPresubmitChecks(gcl.ChangeInfo(name='temp', files=files), 704 return DoPresubmitChecks(gcl.ChangeInfo(name='temp', files=files),
705 options.commit, 705 options.commit,
706 options.verbose, 706 options.verbose,
707 sys.stdout, 707 sys.stdout,
708 sys.stdin) 708 sys.stdin)
709 709
710 710
711 if __name__ == '__main__': 711 if __name__ == '__main__':
712 sys.exit(Main(sys.argv)) 712 sys.exit(Main(sys.argv))
OLDNEW
« no previous file with comments | « PRESUBMIT.py ('k') | tests/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698