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

Side by Side Diff: gclient.py

Issue 2885021: Move _RunHooks() higher to simplify the diff. NO CODE CHANGE. (Closed)
Patch Set: Created 10 years, 5 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 | « no previous file | no next file » | 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) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 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 """Meta checkout manager supporting both Subversion and GIT. 6 """Meta checkout manager supporting both Subversion and GIT.
7 7
8 Files 8 Files
9 .gclient : Current client configuration, written by 'config' command. 9 .gclient : Current client configuration, written by 'config' command.
10 Format is a Python script defining 'solutions', a list whose 10 Format is a Python script defining 'solutions', a list whose
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 if d in deps and deps[d] != url: 307 if d in deps and deps[d] != url:
308 raise gclient_utils.Error( 308 raise gclient_utils.Error(
309 "Solutions have conflicting versions of dependency \"%s\"" % d) 309 "Solutions have conflicting versions of dependency \"%s\"" % d)
310 if d in solution_urls and solution_urls[d] != url: 310 if d in solution_urls and solution_urls[d] != url:
311 raise gclient_utils.Error( 311 raise gclient_utils.Error(
312 "Dependency \"%s\" conflicts with specified solution" % d) 312 "Dependency \"%s\" conflicts with specified solution" % d)
313 # Grab the dependency. 313 # Grab the dependency.
314 deps[d] = url 314 deps[d] = url
315 return deps 315 return deps
316 316
317 def _RunHookAction(self, hook_dict, matching_file_list):
318 """Runs the action from a single hook."""
319 logging.info(hook_dict)
320 logging.info(matching_file_list)
321 command = hook_dict['action'][:]
322 if command[0] == 'python':
323 # If the hook specified "python" as the first item, the action is a
324 # Python script. Run it by starting a new copy of the same
325 # interpreter.
326 command[0] = sys.executable
327
328 if '$matching_files' in command:
329 splice_index = command.index('$matching_files')
330 command[splice_index:splice_index + 1] = matching_file_list
331
332 # Use a discrete exit status code of 2 to indicate that a hook action
333 # failed. Users of this script may wish to treat hook action failures
334 # differently from VC failures.
335 return gclient_utils.SubprocessCall(command, self.root_dir(), fail_status=2)
336
337 def _RunHooks(self, command, file_list, is_using_git): 317 def _RunHooks(self, command, file_list, is_using_git):
338 """Evaluates all hooks, running actions as needed. 318 """Evaluates all hooks, running actions as needed.
339 """ 319 """
340 # Hooks only run for these command types. 320 # Hooks only run for these command types.
341 if not command in ('update', 'revert', 'runhooks'): 321 if not command in ('update', 'revert', 'runhooks'):
342 return 322 return
343 323
344 # Hooks only run when --nohooks is not specified 324 # Hooks only run when --nohooks is not specified
345 if self._options.nohooks: 325 if self._options.nohooks:
346 return 326 return
(...skipping 13 matching lines...) Expand all
360 return 340 return
361 341
362 # Run hooks on the basis of whether the files from the gclient operation 342 # Run hooks on the basis of whether the files from the gclient operation
363 # match each hook's pattern. 343 # match each hook's pattern.
364 for hook_dict in hooks: 344 for hook_dict in hooks:
365 pattern = re.compile(hook_dict['pattern']) 345 pattern = re.compile(hook_dict['pattern'])
366 matching_file_list = [f for f in file_list if pattern.search(f)] 346 matching_file_list = [f for f in file_list if pattern.search(f)]
367 if matching_file_list: 347 if matching_file_list:
368 self._RunHookAction(hook_dict, matching_file_list) 348 self._RunHookAction(hook_dict, matching_file_list)
369 349
350 def _RunHookAction(self, hook_dict, matching_file_list):
351 """Runs the action from a single hook."""
352 logging.info(hook_dict)
353 logging.info(matching_file_list)
354 command = hook_dict['action'][:]
355 if command[0] == 'python':
356 # If the hook specified "python" as the first item, the action is a
357 # Python script. Run it by starting a new copy of the same
358 # interpreter.
359 command[0] = sys.executable
360
361 if '$matching_files' in command:
362 splice_index = command.index('$matching_files')
363 command[splice_index:splice_index + 1] = matching_file_list
364
365 # Use a discrete exit status code of 2 to indicate that a hook action
366 # failed. Users of this script may wish to treat hook action failures
367 # differently from VC failures.
368 return gclient_utils.SubprocessCall(command, self.root_dir(), fail_status=2)
369
370 def root_dir(self): 370 def root_dir(self):
371 return self.parent.root_dir() 371 return self.parent.root_dir()
372 372
373 def enforced_os(self): 373 def enforced_os(self):
374 return self.parent.enforced_os() 374 return self.parent.enforced_os()
375 375
376 def recursion_limit(self): 376 def recursion_limit(self):
377 return self.parent.recursion_limit() - 1 377 return self.parent.recursion_limit() - 1
378 378
379 def tree(self, force_all): 379 def tree(self, force_all):
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 return CMDhelp(parser, argv) 1191 return CMDhelp(parser, argv)
1192 except gclient_utils.Error, e: 1192 except gclient_utils.Error, e:
1193 print >> sys.stderr, 'Error: %s' % str(e) 1193 print >> sys.stderr, 'Error: %s' % str(e)
1194 return 1 1194 return 1
1195 1195
1196 1196
1197 if '__main__' == __name__: 1197 if '__main__' == __name__:
1198 sys.exit(Main(sys.argv[1:])) 1198 sys.exit(Main(sys.argv[1:]))
1199 1199
1200 # vim: ts=2:sw=2:tw=80:et: 1200 # vim: ts=2:sw=2:tw=80:et:
OLDNEW
« 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