cbuildbot: reject private CLs in the CQ

We don't want to merge CLs marked private in the CQ (pre-cq is fine),
so reject ones that are still marked as private.

BUG=chromium:825407
TEST=precq passes

Change-Id: If09243920c08f2ff505801d43f84353ff2259184
Reviewed-on: https://chromium-review.googlesource.com/1117908
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/lib/patch.py b/lib/patch.py
index 42d9bf3..598313f 100644
--- a/lib/patch.py
+++ b/lib/patch.py
@@ -1873,6 +1873,7 @@
     # status - Current state of this change.  Can be one of
     # ['NEW', 'SUBMITTED', 'MERGED', 'ABANDONED'].
     self.status = patch_dict['status']
+    self.private = patch_dict.get('private', False)
     self._approvals = []
     if 'currentPatchSet' in self.patch_dict:
       self._approvals = self.patch_dict['currentPatchSet'].get('approvals', [])
@@ -1917,6 +1918,7 @@
           'url': gob_util.GetChangePageUrl(host, change['_number']),
           'status': change['status'],
           'subject': change.get('subject'),
+          'private': change.get('is_private', False),
       }
       current_revision = change.get('current_revision', '')
       current_revision_info = change.get('revisions', {}).get(current_revision)
@@ -2041,6 +2043,10 @@
     return all(self.HasApproval(field, value)
                for field, value in flags.iteritems())
 
+  def IsPrivate(self):
+    """Return whether this CL is currently marked Private."""
+    return self.private
+
   def WasVetoed(self):
     """Return whether this CL was vetoed with VRIF=-1 or CRVW=-2."""
     return self.HasApproval('VRIF', '-1') or self.HasApproval('CRVW', '-2')
@@ -2080,6 +2086,10 @@
       return PatchNotSubmittable(self, 'is not marked Verified=+1.')
     elif not self.HasApproval('COMR', ('1', '2')):
       return PatchNotSubmittable(self, 'is not marked Commit-Queue>=+1.')
+    elif self.IsPrivate():
+      return PatchNotSubmittable(self, 'is marked private still.')
+
+    return None
 
   def GetLatestApproval(self, field):
     """Return most recent value of specific field on the current patchset.
diff --git a/lib/patch_unittest.py b/lib/patch_unittest.py
index 79d483a..983aa93 100644
--- a/lib/patch_unittest.py
+++ b/lib/patch_unittest.py
@@ -1181,6 +1181,7 @@
         'id': j['change_id'],
         'lastUpdated': 1473894166,
         'number': str(j['_number']),
+        'private': False,
     }
     ret = cros_patch.GerritPatch.ConvertQueryResults(j, 'host')
     self.assertEqual(ret, exp)