Merge "Only the last CI result can be treated as merged"

This commit is contained in:
Jenkins
2014-07-17 05:32:25 +00:00
committed by Gerrit Code Review
2 changed files with 87 additions and 3 deletions

View File

@@ -40,6 +40,7 @@ def find_ci_result(review, ci_map):
review_id = review['id']
review_number = review['number']
ci_already_seen = set()
for comment in reversed(review.get('comments') or []):
reviewer_id = comment['reviewer'].get('username')
@@ -72,9 +73,13 @@ def find_ci_result(review, ci_map):
result = _find_vote(review, ci['id'], patch_set_number)
if result is not None:
is_merged = (review['status'] == 'MERGED' and
patch_set_number == review['patchSets'][-1]
['number'])
is_merged = (
review['status'] == 'MERGED' and
patch_set_number == review['patchSets'][-1]['number'] and
ci['id'] not in ci_already_seen)
ci_already_seen.add(ci['id'])
yield {
'reviewer': comment['reviewer'],
'ci_result': result,

View File

@@ -0,0 +1,79 @@
# Copyright (c) 2013 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import testtools
from stackalytics.processor import driverlog
class TestDriverlog(testtools.TestCase):
def setUp(self):
super(TestDriverlog, self).setUp()
def test_find_ci_result_voting_ci(self):
review = {
'record_type': 'review',
'id': 'I1045730e47e9e6ad31fcdfbaefdad77e2f3b2c3e',
'module': 'nova',
'branch': 'master',
'status': 'NEW',
'number': '97860',
'patchSets': [
{'number': '1',
'approvals': [
{'type': 'Verified', 'description': 'Verified',
'value': '1', 'grantedOn': 1234567890 - 1,
'by': {
'name': 'Batman',
'email': 'batman@openstack.org',
'username': 'batman'}},
{'type': 'Verified', 'description': 'Verified',
'value': '-1', 'grantedOn': 1234567890,
'by': {
'name': 'Pikachu',
'email': 'pikachu@openstack.org',
'username': 'pikachu'}},
]}],
'comments': [
{'message': 'Patch Set 1: build successful',
'reviewer': {'username': 'batman'},
'timestamp': 1234567890}
]}
ci_map = {
'batman': {
'name': 'Batman Driver',
'vendor': 'Gotham Inc',
'ci': {
'id': 'batman'
}
}
}
res = list(driverlog.find_ci_result(review, ci_map))
expected_result = {
'reviewer': {'username': 'batman'},
'ci_result': True,
'is_merged': False,
'message': 'build successful',
'date': 1234567890,
'review_id': 'I1045730e47e9e6ad31fcdfbaefdad77e2f3b2c3e',
'review_number': '97860',
'driver_name': 'Batman Driver',
'driver_vendor': 'Gotham Inc',
}
self.assertEqual(1, len(res), 'One CI result is expected')
self.assertEqual(expected_result, res[0])