Added support for git cl upload automatic trybot determination.

This is part of my intern project, which is detailed here:
  "https://docs.google.com/a/google.com/document/d/10bkzag1UUbtESPkEWHYaZtGMEEbCN5Zad72PuoRpwZE/edit#"

The idea is to have "git cl upload" annotate the CL description with a
flag like "CQ_TRYBOTS=...", which CQ will then look at to determine which
trybots to run the the given CL.

The CL for the change for CQ is at "https://chromereviews.googleplex.com/51757013/".

R=dpranke@google.com, iannucci@google.com
BUG=378097

Review URL: https://codereview.chromium.org/348473003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@280039 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index f86a781..72770a1 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -1552,7 +1552,7 @@
   return 0
 
 
-def RietveldUpload(options, args, cl):
+def RietveldUpload(options, args, cl, change):
   """upload the patch to rietveld."""
   upload_args = ['--assume_yes']  # Don't ask about untracked files.
   upload_args.extend(['--server', cl.GetRietveldServer()])
@@ -1579,6 +1579,22 @@
     change_desc = ChangeDescription(message)
     if options.reviewers:
       change_desc.update_reviewers(options.reviewers)
+    if options.auto_bots:
+      masters = presubmit_support.DoGetTryMasters(
+          change,
+          change.LocalPaths(),
+          settings.GetRoot(),
+          None,
+          None,
+          options.verbose,
+          sys.stdout)
+
+      if masters:
+        change_description = change_desc.description + '\nCQ_TRYBOTS='
+        lst = []
+        for master, mapping in masters.iteritems():
+          lst.append(master + ':' + ','.join(mapping.keys()))
+        change_desc.set_description(change_description + ';'.join(lst))
     if not options.force:
       change_desc.prompt()
 
@@ -1709,6 +1725,8 @@
                          'use for CL.  Default: master')
   parser.add_option('--email', default=None,
                     help='email address to use to connect to Rietveld')
+  parser.add_option('--auto-bots', default=False, action='store_true',
+                    help='Autogenerate which trybots to use for this CL')
 
   add_git_similarity(parser)
   (options, args) = parser.parse_args(args)
@@ -1768,7 +1786,7 @@
   print_stats(options.similarity, options.find_copies, args)
   if settings.GetIsGerrit():
     return GerritUpload(options, args, cl)
-  ret = RietveldUpload(options, args, cl)
+  ret = RietveldUpload(options, args, cl, change)
   if not ret:
     git_set_branch_value('last-upload-hash',
                          RunGit(['rev-parse', 'HEAD']).strip())