| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -9,6 +9,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					This tool does a two things:
 | 
					 | 
					 | 
					 | 
					This tool does a two things:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					* Maintains a infra.git checkout pinned at "deployed" in the home dir
 | 
					 | 
					 | 
					 | 
					* Maintains a infra.git checkout pinned at "deployed" in the home dir
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					* Acts as an alias to infra.tools.*
 | 
					 | 
					 | 
					 | 
					* Acts as an alias to infra.tools.*
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					* Acts as an alias to infra.git/cipd/<executable>
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					"""
 | 
					 | 
					 | 
					 | 
					"""
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# TODO(hinoka): Use cipd/glyco instead of git/gclient.
 | 
					 | 
					 | 
					 | 
					# TODO(hinoka): Use cipd/glyco instead of git/gclient.
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -75,34 +76,67 @@ def ensure_infra(branch):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  sys.stderr.flush()
 | 
					 | 
					 | 
					 | 
					  sys.stderr.flush()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					def is_exe(filename):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  """Given a full filepath, return true if the file is an executable."""
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if sys.platform.startswith('win'):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return filename.endswith('.exe')
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  else:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return os.path.isfile(filename) and os.access(filename, os.X_OK)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def get_available_tools():
 | 
					 | 
					 | 
					 | 
					def get_available_tools():
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  tools = []
 | 
					 | 
					 | 
					 | 
					  """Returns a tuple of (list of infra tools, list of cipd tools)"""
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  infra_tools = []
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  cipd_tools = []
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  starting = os.path.join(TARGET_DIR, 'infra', 'infra', 'tools')
 | 
					 | 
					 | 
					 | 
					  starting = os.path.join(TARGET_DIR, 'infra', 'infra', 'tools')
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for root, _, files in os.walk(starting):
 | 
					 | 
					 | 
					 | 
					  for root, _, files in os.walk(starting):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if '__main__.py' in files:
 | 
					 | 
					 | 
					 | 
					    if '__main__.py' in files:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      tools.append(root[len(starting)+1:].replace(os.path.sep, '.'))
 | 
					 | 
					 | 
					 | 
					      infra_tools.append(root[len(starting)+1:].replace(os.path.sep, '.'))
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return sorted(tools)
 | 
					 | 
					 | 
					 | 
					  cipd = os.path.join(TARGET_DIR, 'infra', 'cipd')
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  for fn in os.listdir(cipd):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if is_exe(os.path.join(cipd, fn)):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      cipd_tools.append(fn)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  return (sorted(infra_tools), sorted(cipd_tools))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def run(args):
 | 
					 | 
					 | 
					 | 
					def run(args):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if args:
 | 
					 | 
					 | 
					 | 
					  if args:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    tool_name = args[0]
 | 
					 | 
					 | 
					 | 
					    tool_name = args[0]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cmd = [
 | 
					 | 
					 | 
					 | 
					    # Check to see if it is a infra tool first.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        sys.executable, os.path.join(TARGET_DIR, 'infra', 'run.py'),
 | 
					 | 
					 | 
					 | 
					    infra_dir = os.path.join(
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        'infra.tools.%s' % tool_name]
 | 
					 | 
					 | 
					 | 
					      TARGET_DIR, 'infra', 'infra', 'tools', *tool_name.split('.'))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    cipd_file = os.path.join(TARGET_DIR, 'infra', 'cipd', tool_name)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if sys.platform.startswith('win'):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      cipd_file += '.exe'
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (os.path.isdir(infra_dir)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        and os.path.isfile(os.path.join(infra_dir, '__main__.py'))):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      cmd = [
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          sys.executable, os.path.join(TARGET_DIR, 'infra', 'run.py'),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          'infra.tools.%s' % tool_name]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    elif os.path.isfile(cipd_file) and is_exe(cipd_file):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      cmd = [cipd_file]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # Add the remaining arguments.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cmd.extend(args[1:])
 | 
					 | 
					 | 
					 | 
					    cmd.extend(args[1:])
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return subprocess.call(cmd)
 | 
					 | 
					 | 
					 | 
					    return subprocess.call(cmd)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  tools = get_available_tools()
 | 
					 | 
					 | 
					 | 
					  infra_tools, cipd_tools = get_available_tools()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  print """usage: cit.py <name of tool> [args for tool]
 | 
					 | 
					 | 
					 | 
					  print """usage: cit.py <name of tool> [args for tool]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  Wrapper for maintaining and calling tools in "infra.git/run.py infra.tools.*"
 | 
					 | 
					 | 
					 | 
					  Wrapper for maintaining and calling tools in:
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    "infra.git/run.py infra.tools.*"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    "infra.git/cipd/*"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  Available tools are:
 | 
					 | 
					 | 
					 | 
					  Available infra tools are:"""
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  """
 | 
					 | 
					 | 
					 | 
					  for tool in infra_tools:
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for tool in tools:
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print '  * %s' % tool
 | 
					 | 
					 | 
					 | 
					    print '  * %s' % tool
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  print """
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  Available cipd tools are:"""
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  for tool in cipd_tools:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    print '  * %s' % tool
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def main():
 | 
					 | 
					 | 
					 | 
					def main():
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  parser = argparse.ArgumentParser("Chrome Infrastructure CLI.")
 | 
					 | 
					 | 
					 | 
					  parser = argparse.ArgumentParser("Chrome Infrastructure CLI.")
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |