Add support for triggering a cl on the bots.

Same parameters as when triggering a cl.

One can do e.g.,
tools/trigger.py --cl https://r8-review.googlesource.com/c/r8/+/37420/1 --builder archive
to get the bits archived for bug testing by external people

or
tools/trigger.py --cl https://r8-review.googlesource.com/c/r8/+/37420/1 --builder windows
to test on the windows bot

or
tools/trigger.py --cl https://r8-review.googlesource.com/c/r8/+/37420/1
to test the cl on all builders.

Change-Id: I070bb83597f3e277ceb018be9d3697988508ba3a
diff --git a/tools/trigger.py b/tools/trigger.py
index 7f273e7..1a33795 100755
--- a/tools/trigger.py
+++ b/tools/trigger.py
@@ -26,6 +26,10 @@
   result.add_option('--release',
                     help='Run on the release branch builders.',
                     default=False, action='store_true')
+  result.add_option('--cl',
+                    help='Run the specified cl on the bots. This should be '
+                    'the full url, e.g., '
+                    'https://r8-review.googlesource.com/c/r8/+/37420/1')
   result.add_option('--builder', help='Trigger specific builder')
   return result.parse_args()
 
@@ -63,20 +67,33 @@
     cmd = ['bb', 'add', 'r8/ci/%s' % builder , '-commit', commit_url]
     subprocess.check_call(cmd)
 
+def trigger_cl(builders, cl_url):
+  for builder in builders:
+    cmd = ['bb', 'add', 'r8/ci/%s' % builder , '-cl', cl_url]
+    subprocess.check_call(cmd)
+
 def Main():
   (options, args) = ParseOptions()
-  if len(args) != 1:
+  if len(args) != 1 and not options.cl:
     print 'Takes exactly one argument, the commit to run'
     return 1
-  commit = args[0]
+
+  if options.cl and options.release:
+    print 'You can\'t run cls on the release bots'
+    return 1
+
+  commit = None if options.cl else args[0]
   (master_builders, release_builders) = get_builders()
+  builders = release_builders if options.release else master_builders
   if options.builder:
     builder = options.builder
     assert builder in master_builders or builder in release_builders
-    trigger_builders([builder], commit)
+    builders = [options.builder]
+  if options.cl:
+    trigger_cl(builders, options.cl)
   else:
-    trigger_builders(release_builders if options.release else master_builders,
-                     commit)
+    assert commit
+    trigger_builders(builders, commit)
 
 if __name__ == '__main__':
   sys.exit(Main())