Send to CQ by default and add --no-commit flag + cleanup.

Send the created CL to the CQ right away upon creation.
Add a --no-commit flag that can be specified to avoid that.
Remove the trybot status feature (--status) and the commit CL
feature (--commit).

BUG=chromium:433305
TESTED=Ran:
tools/autoroller/roll_webrtc_in_chromium.py --chromium-checkout /ssd/chrome/src --dry-run --ignore-checks
and verified it didn't trigger tryjobs or sent to CQ. Then I ran:
tools/autoroller/roll_webrtc_in_chromium.py --chromium-checkout /ssd/chrome/src --ignore-checks
and verified it was sent to CQ.

R=tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/42739004

Cr-Commit-Position: refs/heads/master@{#8715}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8715 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/tools/autoroller/roll_webrtc_in_chromium.py b/tools/autoroller/roll_webrtc_in_chromium.py
index 818371b..e5ffa36 100755
--- a/tools/autoroller/roll_webrtc_in_chromium.py
+++ b/tools/autoroller/roll_webrtc_in_chromium.py
@@ -27,7 +27,6 @@
 sys.path.insert(1, os.path.join(ROOT_DIR, 'tools'))
 import find_depot_tools
 find_depot_tools.add_depot_tools_to_path()
-import rietveld
 from gclient import GClientKeywords
 from third_party import upload
 
@@ -46,18 +45,6 @@
 LIBJINGLE_PATH = 'third_party/libjingle/source/talk'
 LIBJINGLE_README = 'third_party/libjingle/README.chromium'
 
-# Result codes from build/third_party/buildbot_8_4p1/buildbot/status/results.py
-# plus the -1 code which is used when there's no result yet.
-TRYJOB_STATUS = {
-  -1: 'RUNNING',
-  0: 'SUCCESS',
-  1: 'WARNINGS',
-  2: 'FAILURE',
-  3: 'SKIPPED',
-  4: 'EXCEPTION',
-  5: 'RETRY',
-}
-
 CommitInfo = collections.namedtuple('CommitInfo', ['svn_revision',
                                                    'git_commit',
                                                    'git_repo_url'])
@@ -103,40 +90,6 @@
   return local_scope
 
 
-def _PrintTrybotStatus(issue, rietveld_server):
-  """Prints the status of all trybots for the specified issue.
-
-  Returns:
-    True if number of trybots > 0 and all are green. False otherwise.
-  """
-  assert type(issue) is int
-
-  remote = rietveld.Rietveld('https://' + rietveld_server, None, None)
-
-  # Get patches for the issue so we can use the latest one.
-  data = remote.get_issue_properties(issue, messages=False)
-  patchsets = data['patchsets']
-
-  # Get trybot status for the latest patch set.
-  data = remote.get_patchset_properties(issue, patchsets[-1])
-
-  tryjob_results = data['try_job_results']
-  if len(tryjob_results) == 0:
-    print 'No trybots have yet been triggered for https://%s/%d' % (
-        rietveld_server, issue)
-    return False
-
-  status_to_name = {}
-  for trybot_result in tryjob_results:
-    status = TRYJOB_STATUS.get(trybot_result['result'], 'UNKNOWN')
-    status_to_name.setdefault(status, [])
-    status_to_name[status].append(trybot_result['builder'])
-
-  # Print these to stdout instead of logging since they will be parsed.
-  print ('Status for https://%s/%d:' % (rietveld_server, issue))
-  for status,name_list in status_to_name.iteritems():
-    print '%s: %s' % (status, ','.join(sorted(name_list)))
-
 
 def _GenerateCLDescription(webrtc_current, libjingle_current,
                            webrtc_new, libjingle_new):
@@ -169,6 +122,7 @@
   if libjingle_str:
     description += libjingle_str + '\n'
     description += 'Changes: %s\n' % libjingle_changelog_url
+  description += '\nTBR='
   return description
 
 
@@ -180,10 +134,11 @@
 
 
 class AutoRoller(object):
-  def __init__(self, chromium_src, dry_run, ignore_checks):
+  def __init__(self, chromium_src, dry_run, ignore_checks, no_commit):
     self._chromium_src = chromium_src
     self._dry_run = dry_run
     self._ignore_checks = ignore_checks
+    self._no_commit = no_commit
 
   def _RunCommand(self, command, working_dir=None, ignore_exit_code=False,
                   extra_env=None):
@@ -253,7 +208,7 @@
     if len(lines) == 0:
       return True
 
-    logging.error('Found dirty/unversioned files:\n%s', '\n'.join(lines))
+    logging.debug('Dirty/unversioned files:\n%s', '\n'.join(lines))
     return False
 
   def _UpdateReadmeFile(self, readme_path, new_revision):
@@ -304,8 +259,7 @@
 
     if self._IsTreeClean():
       logging.debug('Tree is clean - no changes detected.')
-      self._RunCommand(['git', 'checkout', 'master'])
-      self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME])
+      self._DeleteRollBranch()
     else:
       self._UpdateReadmeFile(LIBJINGLE_README, libjingle_latest.svn_revision)
       description = _GenerateCLDescription(webrtc_current, libjingle_current,
@@ -319,14 +273,21 @@
       cl_info = self._GetCLInfo()
       logging.debug('Issue: %d URL: %s', cl_info.issue, cl_info.url)
 
-      if not self._dry_run:
-        logging.debug('Starting try jobs...')
-        self._RunCommand(['git', 'cl', 'try'])
-        logging.debug('Change in progress. Monitor here:\n%s', cl_info.url)
+      if not self._dry_run and not self._no_commit:
+        logging.debug('Sending the CL to the CQ...')
+        self._RunCommand(['git', 'cl', 'set_commit'])
+        logging.debug('Sent the CL to the CQ. Monitor here:\n%s', cl_info.url)
+        self._DeleteRollBranch()
 
     # TODO(kjellander): Checkout masters/previous branches again.
     return 0
 
+  def _DeleteRollBranch(self):
+     self._RunCommand(['git', 'checkout', 'master'])
+     self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME])
+     logging.debug('Deleted the local roll branch (%s)', ROLL_BRANCH_NAME)
+
+
   def _GetBranches(self):
     """Returns a tuple of active,branches.
 
@@ -360,49 +321,6 @@
       self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME])
     return 0
 
-  def Commit(self):
-    def PresubmitPassed(presubmit):
-      return presubmit.find('** Presubmit ERRORS **') == -1
-
-    # First phase of two.  Run the presubmit step for both repos.
-    presubmit_passed = True
-    active_branch, branches = self._GetBranches()
-    if ROLL_BRANCH_NAME in branches and presubmit_passed:
-      self._RunCommand(['git', 'checkout', ROLL_BRANCH_NAME])
-      presubmit = self._RunCommand(['git', 'cl', 'presubmit'])
-      presubmit_passed = PresubmitPassed(presubmit)
-      if not presubmit_passed:
-        logging.error('Presubmit errors\n%s', presubmit)
-      self._RunCommand(['git', 'checkout', active_branch])
-
-    if not presubmit_passed:
-      return -1
-
-    # Phase two, we've passed the presubmit test, so let's commit.
-
-    active_branch, branches = self._GetBranches()
-    if active_branch == ROLL_BRANCH_NAME:
-      active_branch = 'master'
-    if ROLL_BRANCH_NAME in branches and not self._dry_run:
-      print 'Committing change.'
-      self._RunCommand(['git', 'checkout', ROLL_BRANCH_NAME])
-      self._RunCommand(['git', 'rebase', 'master'])
-      self._RunCommand(['git', 'cl', 'land', '-f'])
-      # TODO(tommi): Verify that the issue was successfully closed.
-      self._RunCommand(['git', 'checkout', active_branch])
-      self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME])
-
-    return 0
-
-  def Status(self):
-    print '\n========== TRYJOBS STATUS =========='
-    active_branch, _ = self._GetBranches()
-    if active_branch != ROLL_BRANCH_NAME:
-      self._RunCommand(['git', 'checkout', ROLL_BRANCH_NAME])
-    cl_info = self._GetCLInfo()
-    _PrintTrybotStatus(cl_info.issue, cl_info.rietveld_server)
-    return 0
-
 
 def main():
   if sys.platform in ('win32', 'cygwin'):
@@ -418,12 +336,9 @@
     help=('Aborts a previously prepared roll. '
           'Closes any associated issues and deletes the roll branches'),
     action='store_true')
-  parser.add_argument('--commit',
-    help=('Commits a prepared roll (that\'s assumed to be green). '
-          'Closes any associated issues and deletes the roll branches'),
-    action='store_true')
-  parser.add_argument('--status',
-    help='Display tryjob status for a previously created roll.',
+  parser.add_argument('--no-commit',
+    help=('Don\'t send the CL to the CQ. This is useful if additional changes '
+          'are needed to the CL (like for API changes).'),
     action='store_true')
   parser.add_argument('--dry-run', action='store_true', default=False,
       help='Create branches and CLs but doesn\'t send tryjobs or commit.')
@@ -457,13 +372,9 @@
       return -2
 
   autoroller = AutoRoller(args.chromium_checkout, args.dry_run,
-                          args.ignore_checks)
+                          args.ignore_checks, args.no_commit)
   if args.abort:
     return autoroller.Abort()
-  elif args.commit:
-    return autoroller.Commit()
-  elif args.status:
-    return autoroller.Status()
   else:
     return autoroller.PrepareRoll()