| Index: cit.py
|
| diff --git a/cit.py b/cit.py
|
| index a83caf7a939c621f221fff6229cc6d2903f26b2e..b99411bc922a2b054e829fe44d7647d73dcc1f3a 100755
|
| --- a/cit.py
|
| +++ b/cit.py
|
| @@ -9,6 +9,7 @@
|
| This tool does a two things:
|
| * 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.git/cipd/<executable>
|
| """
|
|
|
| # TODO(hinoka): Use cipd/glyco instead of git/gclient.
|
| @@ -75,34 +76,67 @@ def ensure_infra(branch):
|
| 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():
|
| - 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')
|
| for root, _, files in os.walk(starting):
|
| if '__main__.py' in files:
|
| - tools.append(root[len(starting)+1:].replace(os.path.sep, '.'))
|
| - return sorted(tools)
|
| + infra_tools.append(root[len(starting)+1:].replace(os.path.sep, '.'))
|
| + 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):
|
| if args:
|
| tool_name = args[0]
|
| - cmd = [
|
| - sys.executable, os.path.join(TARGET_DIR, 'infra', 'run.py'),
|
| - 'infra.tools.%s' % tool_name]
|
| + # Check to see if it is a infra tool first.
|
| + infra_dir = os.path.join(
|
| + 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:])
|
| 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]
|
|
|
| - 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:
|
| - """
|
| - for tool in tools:
|
| + Available infra tools are:"""
|
| + for tool in infra_tools:
|
| print ' * %s' % tool
|
|
|
| + print """
|
| + Available cipd tools are:"""
|
| + for tool in cipd_tools:
|
| + print ' * %s' % tool
|
| +
|
| +
|
|
|
| def main():
|
| parser = argparse.ArgumentParser("Chrome Infrastructure CLI.")
|
|
|