From a57bd21836a7441a626c46098b25c4a9c3920b1a Mon Sep 17 00:00:00 2001 From: Yolanda Robla Date: Mon, 31 Mar 2014 12:27:05 +0200 Subject: [PATCH] Checks if requirements overlap between head and branch reqs If there is a requirement in head and branches, and are not equal, check if the head requirement is overlapping with branch one, if not it triggers an error Change-Id: I159e4608a5d345e57ae24fd19b1c54c1de4ed9d9 Closes-Bug: #1274731 --- .../project-requirements-change.py | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/modules/openstack_project/files/slave_scripts/project-requirements-change.py b/modules/openstack_project/files/slave_scripts/project-requirements-change.py index 996668cf25..b014152847 100755 --- a/modules/openstack_project/files/slave_scripts/project-requirements-change.py +++ b/modules/openstack_project/files/slave_scripts/project-requirements-change.py @@ -33,6 +33,54 @@ def run_command(cmd): return out.strip() +def increase_version(version_string): + """ + Returns simple increased version string + """ + items = version_string.split('.') + for i in range(len(items) - 1, 0, -1): + current_item = items[i] + if current_item.isdigit(): + current_item = int(current_item) + 1 + items[i] = str(current_item) + break + final = '.'.join(items) + return final + + +def decrease_version(version_string): + """ + Returns simple decreased version string + """ + items = version_string.split('.') + for i in range(len(items) - 1, 0, -1): + current_item = items[i] + if current_item.isdigit(): + current_item = int(current_item) - 1 + if current_item >= 0: + items[i] = str(current_item) + break + else: + # continue to parent + items[i] = '9' + + final = '.'.join(items) + return final + + +def get_version_required(req): + """ + Returns required version string depending on reqs + """ + operator = req[0] + version = req[1] + if operator == '>': + version = increase_version(version) + elif operator == '<': + version = decrease_version(version) + return version + + class RequirementsList(object): def __init__(self, name): self.name = name @@ -130,8 +178,20 @@ def main(): failed = False for req in head_reqs.reqs.values(): name = req.project_name.lower() - if name in branch_reqs.reqs and req == branch_reqs.reqs[name]: - continue + if name in branch_reqs.reqs: + if req == branch_reqs.reqs[name]: + continue + else: + # check if overlaps + for spec in req.specs: + version = get_version_required(spec) + branch_req = branch_reqs.reqs[name] + if not branch_req.__contains__(version): + failed = True + print("Requirement %s does not overlap with branch " % + str(req)) + continue + if name not in os_reqs.reqs: print("Requirement %s not in openstack/requirements" % str(req)) failed = True