Commit 02d4b825 authored by Edward Lesmes's avatar Edward Lesmes Committed by LUCI CQ

[presubmit][owners] Skip owners check when Bot-Review is +1

Add support for Bot-Review label to allow trusted bots to
bypass owners checks.

Bug: 1093627
Change-Id: Ie7398041e9e32fd87bb415b239b5ec0a4740e1ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2530516
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
Reviewed-by: 's avatarYulan Lin <yulanlin@google.com>
parent b4f4226d
......@@ -1122,6 +1122,11 @@ def CheckOwnersFormat(input_api, output_api):
def CheckOwners(input_api, output_api, source_file_filter=None):
# Skip OWNERS check when Bot-Commit label is approved.
if (input_api.change.issue
and input_api.gerrit.IsBotCommitApproved(input_api.change.issue)):
return []
affected_files = set([f.LocalPath() for f in
input_api.change.AffectedFiles(file_filter=source_file_filter)])
owners_db = input_api.owners_db
......
......@@ -433,20 +433,26 @@ class GerritAccessor(object):
ref = 'refs/heads/%s' % ref
return ref
def _GetApproversForLabel(self, issue, label):
change_info = self.GetChangeInfo(issue)
label_info = change_info.get('labels', {}).get(label, {})
values = label_info.get('values', {}).keys()
if not values:
return []
max_value = max(int(v) for v in values)
return [v for v in label_info.get('all', [])
if v.get('value', 0) == max_value]
def IsBotCommitApproved(self, issue):
return bool(self._GetApproversForLabel(issue, 'Bot-Commit'))
def GetChangeOwner(self, issue):
return self.GetChangeInfo(issue)['owner']['email']
def GetChangeReviewers(self, issue, approving_only=True):
changeinfo = self.GetChangeInfo(issue)
if approving_only:
labelinfo = changeinfo.get('labels', {}).get('Code-Review', {})
values = labelinfo.get('values', {}).keys()
try:
max_value = max(int(v) for v in values)
reviewers = [r for r in labelinfo.get('all', [])
if r.get('value', 0) == max_value]
except ValueError: # values is the empty list
reviewers = []
reviewers = self._GetApproversForLabel(issue, 'Code-Review')
else:
reviewers = changeinfo.get('reviewers', {}).get('REVIEWER', [])
return [r.get('email') for r in reviewers]
......
......@@ -2751,6 +2751,33 @@ the current line as well!
response=response,
expected_output='')
def testCannedCheckOwners_BotCommit(self):
response = {
"owner": {"email": "john@example.com"},
"labels": {"Bot-Commit": {
u'all': [
{
u'email': u'bot@example.com',
u'value': 1
},
],
u'approved': {u'email': u'bot@example.org'},
u'default_value': 0,
u'values': {u' 0': u'No score',
u'+1': u'Looks good to me'},
}},
"reviewers": {"REVIEWER": [{u'email': u'bot@example.com'}]},
}
self.AssertOwnersWorks(approvers=set(),
response=response,
is_committing=True,
expected_output='')
self.AssertOwnersWorks(approvers=set(),
is_committing=False,
response=response,
expected_output='')
def testCannedCheckOwners_Approved(self):
response = {
"owner": {"email": "john@example.com"},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment