|  | @@ -1,5 +1,5 @@
 | 
	
		
			
				|  |  |  #!/usr/bin/env python2.7
 | 
	
		
			
				|  |  | -# Copyright 2015, Google Inc.
 | 
	
		
			
				|  |  | +# Copyright 2015-2016, Google Inc.
 | 
	
		
			
				|  |  |  # All rights reserved.
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # Redistribution and use in source and binary forms, with or without
 | 
	
	
		
			
				|  | @@ -646,6 +646,9 @@ argp.add_argument('--build_only',
 | 
	
		
			
				|  |  |                    action='store_const',
 | 
	
		
			
				|  |  |                    const=True,
 | 
	
		
			
				|  |  |                    help='Perform all the build steps but dont run any tests.')
 | 
	
		
			
				|  |  | +argp.add_argument('--update_submodules', default=[], nargs='*',
 | 
	
		
			
				|  |  | +                  help='Update some submodules before building. If any are updated, also run generate_projects. ' +
 | 
	
		
			
				|  |  | +                       'Submodules are specified as SUBMODULE_NAME:BRANCH; if BRANCH is omitted, master is assumed.')
 | 
	
		
			
				|  |  |  argp.add_argument('-a', '--antagonists', default=0, type=int)
 | 
	
		
			
				|  |  |  argp.add_argument('-x', '--xml_report', default=None, type=str,
 | 
	
		
			
				|  |  |          help='Generates a JUnit-compatible XML report')
 | 
	
	
		
			
				|  | @@ -681,6 +684,26 @@ if args.use_docker:
 | 
	
		
			
				|  |  |                          env=env)
 | 
	
		
			
				|  |  |    sys.exit(0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# update submodules if necessary
 | 
	
		
			
				|  |  | +if args.update_submodules:
 | 
	
		
			
				|  |  | +  for spec in args.update_submodules:
 | 
	
		
			
				|  |  | +    spec = spec.split(':', 1)
 | 
	
		
			
				|  |  | +    if len(spec) == 1:
 | 
	
		
			
				|  |  | +      submodule = spec[0]
 | 
	
		
			
				|  |  | +      branch = 'master'
 | 
	
		
			
				|  |  | +    elif len(spec) == 2:
 | 
	
		
			
				|  |  | +      submodule = spec[0]
 | 
	
		
			
				|  |  | +      branch = spec[1]
 | 
	
		
			
				|  |  | +    cwd = 'third_party/%s' % submodule
 | 
	
		
			
				|  |  | +    def git(cmd, cwd=cwd):
 | 
	
		
			
				|  |  | +      print 'in %s: git %s' % (cwd, cmd)
 | 
	
		
			
				|  |  | +      subprocess.check_call('git %s' % cmd, cwd=cwd, shell=True)
 | 
	
		
			
				|  |  | +    git('fetch')
 | 
	
		
			
				|  |  | +    git('checkout %s' % branch)
 | 
	
		
			
				|  |  | +    git('pull origin %s' % branch)
 | 
	
		
			
				|  |  | +  subprocess.check_call('tools/buildgen/generate_projects.sh', shell=True)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # grab config
 | 
	
		
			
				|  |  |  run_configs = set(_CONFIGS[cfg]
 | 
	
		
			
				|  |  |                    for cfg in itertools.chain.from_iterable(
 | 
	
	
		
			
				|  | @@ -692,7 +715,7 @@ if args.travis:
 | 
	
		
			
				|  |  |    _FORCE_ENVIRON_FOR_WRAPPERS = {'GRPC_TRACE': 'api'}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if 'all' in args.language:
 | 
	
		
			
				|  |  | -  lang_list = _LANGUAGES.keys()  
 | 
	
		
			
				|  |  | +  lang_list = _LANGUAGES.keys()
 | 
	
		
			
				|  |  |  else:
 | 
	
		
			
				|  |  |    lang_list = args.language
 | 
	
		
			
				|  |  |  # We don't support code coverage on ObjC
 |