From 9e07b0bfe8412adf994fa1b191779fe464c3c796 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Thu, 8 Apr 2021 14:45:01 +0200 Subject: [PATCH] Modernize branch_changer.py script. maintainer-scripts/ChangeLog: * branch_changer.py: Modernize and fix flake8 issues. * setup.cfg: New file. --- maintainer-scripts/branch_changer.py | 70 ++++++++++++++++------------ maintainer-scripts/setup.cfg | 5 ++ 2 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 maintainer-scripts/setup.cfg diff --git a/maintainer-scripts/branch_changer.py b/maintainer-scripts/branch_changer.py index b0580296c16..d7954361752 100755 --- a/maintainer-scripts/branch_changer.py +++ b/maintainer-scripts/branch_changer.py @@ -16,7 +16,8 @@ # # Sample usages of the script: # -# $ ./maintainer-scripts/branch_changer.py api_key --new-target-milestone=6.2:6.3 --comment '6.2 has been released....' --add-known-to-fail=6.2 --limit 3 +# $ ./maintainer-scripts/branch_changer.py api_key --new-target-milestone=6.2:6.3 \ +# --comment '6.2 has been released....' --add-known-to-fail=6.2 --limit 3 # # The invocation will set target milestone to 6.3 for all issues that # have mistone equal to 6.2. Apart from that, a comment is added to these @@ -24,7 +25,8 @@ # At maximum 3 issues will be modified and the script will run # in dry mode (no issues are modified), unless you append --doit option. # -# $ ./maintainer-scripts/branch_changer.py api_key --new-target-milestone=5.5:6.3 --comment 'GCC 5 branch is being closed' --remove 5 --limit 3 +# $ ./maintainer-scripts/branch_changer.py api_key --new-target-milestone=5.5:6.3 \ +# --comment 'GCC 5 branch is being closed' --remove 5 --limit 3 # # Very similar to previous invocation, but instead of adding to known-to-fail, # '5' release is removed from all issues that have the regression prefix. @@ -35,17 +37,19 @@ # issues that contain '7' in its regression prefix. # -import requests -import json import argparse +import json import re -from semantic_version import Version +import requests + +from semantic_version import SimpleSpec base_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/' statuses = ['UNCONFIRMED', 'ASSIGNED', 'SUSPENDED', 'NEW', 'WAITING', 'REOPENED'] search_summary = ' Regression]' -regex = '(.*\[)([0-9\./]*)( [rR]egression])(.*)' +regex = r'(.*\[)([0-9\./]*)( [rR]egression])(.*)' + class Bug: def __init__(self, data): @@ -59,7 +63,7 @@ class Bug: def parse_summary(self): m = re.match(regex, self.data['summary']) - if m != None: + if m: self.versions = m.group(2).split('/') self.is_regression = True self.regex_match = m @@ -116,15 +120,16 @@ class Bug: print(' changing target milestone: "%s" to "%s" (same branch)' % (old_milestone, new_milestone)) elif self.is_regression and new_major in self.versions: args['target_milestone'] = new_milestone - print(' changing target milestone: "%s" to "%s" (regresses with the new milestone)' % (old_milestone, new_milestone)) + print(' changing target milestone: "%s" to "%s" (regresses with the new milestone)' + % (old_milestone, new_milestone)) else: print(' not changing target milestone: not a regression or does not regress with the new milestone') - if 'target_milestone' in args and comment != None: + if 'target_milestone' in args and comment: print(' adding comment: "%s"' % comment) - args['comment'] = {'comment': comment } + args['comment'] = {'comment': comment} - if new_fail_version != None: + if new_fail_version: if self.add_known_to_fail(new_fail_version): s = self.serialize_known_to_fail() print(' changing known_to_fail: "%s" to "%s"' % (self.data['cf_known_to_fail'], s)) @@ -137,8 +142,8 @@ class Bug: return False def serialize_summary(self): - assert self.versions != None - assert self.is_regression == True + assert not self.versions + assert self.is_regression new_version = '/'.join(self.versions) new_summary = self.regex_match.group(1) + new_version + self.regex_match.group(3) + self.regex_match.group(4) @@ -146,19 +151,19 @@ class Bug: def serialize_known_to_fail(self): assert type(self.fail_versions) is list - return ', '.join(sorted(self.fail_versions, key = lambda x: Version(x, partial = True))) + return ', '.join(sorted(self.fail_versions, key=lambda x: SimpleSpec(x))) def modify_bug(self, api_key, params, doit): u = base_url + 'bug/' + str(self.data['id']) data = { 'ids': [self.data['id']], - 'api_key': api_key } + 'api_key': api_key} data.update(params) if doit: - r = requests.put(u, data = json.dumps(data), headers = {"content-type": "text/javascript"}) + r = requests.put(u, data=json.dumps(data), headers={'content-type': 'text/javascript'}) print(r) @staticmethod @@ -170,18 +175,19 @@ class Bug: @staticmethod def get_bugs(api_key, query): u = base_url + 'bug' - r = requests.get(u, params = query) + r = requests.get(u, params=query) return [Bug(x) for x in r.json()['bugs']] + def search(api_key, remove, add, limit, doit): bugs = Bug.get_bugs(api_key, {'api_key': api_key, 'summary': search_summary, 'bug_status': statuses}) bugs = list(filter(lambda x: x.is_regression, bugs)) modified = 0 for bug in bugs: - if remove != None: + if remove: bug.remove_release(remove) - if add != None: + if add: bug.add_release(add) if bug.update_summary(api_key, doit): @@ -191,6 +197,7 @@ def search(api_key, remove, add, limit, doit): print('\nModified PRs: %d' % modified) + def replace_milestone(api_key, limit, old_milestone, new_milestone, comment, add_known_to_fail, doit): bugs = Bug.get_bugs(api_key, {'api_key': api_key, 'bug_status': statuses, 'target_milestone': old_milestone}) @@ -203,23 +210,26 @@ def replace_milestone(api_key, limit, old_milestone, new_milestone, comment, add print('\nModified PRs: %d' % modified) + parser = argparse.ArgumentParser(description='') -parser.add_argument('api_key', help = 'API key') -parser.add_argument('--remove', nargs = '?', help = 'Remove a release from summary') -parser.add_argument('--add', nargs = '?', help = 'Add a new release to summary, e.g. 6:7 will add 7 where 6 is included') -parser.add_argument('--limit', nargs = '?', help = 'Limit number of bugs affected by the script') -parser.add_argument('--doit', action = 'store_true', help = 'Really modify BUGs in the bugzilla') -parser.add_argument('--new-target-milestone', help = 'Set a new target milestone, e.g. 4.9.3:4.9.4 will set milestone to 4.9.4 for all PRs having milestone set to 4.9.3') -parser.add_argument('--add-known-to-fail', help = 'Set a new known to fail for all PRs affected by --new-target-milestone') -parser.add_argument('--comment', help = 'Comment a PR for which we set a new target milestore') +parser.add_argument('api_key', help='API key') +parser.add_argument('--remove', nargs='?', help='Remove a release from summary') +parser.add_argument('--add', nargs='?', help='Add a new release to summary, e.g. 6:7 will add 7 where 6 is included') +parser.add_argument('--limit', nargs='?', help='Limit number of bugs affected by the script') +parser.add_argument('--doit', action='store_true', help='Really modify BUGs in the bugzilla') +parser.add_argument('--new-target-milestone', help='Set a new target milestone, ' + 'e.g. 4.9.3:4.9.4 will set milestone to 4.9.4 for all PRs having milestone set to 4.9.3') +parser.add_argument('--add-known-to-fail', help='Set a new known to fail ' + 'for all PRs affected by --new-target-milestone') +parser.add_argument('--comment', help='Comment a PR for which we set a new target milestore') args = parser.parse_args() # Python3 does not have sys.maxint -args.limit = int(args.limit) if args.limit != None else 10**10 +args.limit = int(args.limit) if args.limit else 10**10 -if args.remove != None or args.add != None: +if args.remove or args.add: search(args.api_key, args.remove, args.add, args.limit, args.doit) -if args.new_target_milestone != None: +if args.new_target_milestone: t = args.new_target_milestone.split(':') assert len(t) == 2 replace_milestone(args.api_key, args.limit, t[0], t[1], args.comment, args.add_known_to_fail, args.doit) diff --git a/maintainer-scripts/setup.cfg b/maintainer-scripts/setup.cfg new file mode 100644 index 00000000000..efc313f6d52 --- /dev/null +++ b/maintainer-scripts/setup.cfg @@ -0,0 +1,5 @@ +[flake8] +max-line-length = 120 + +[tool:pytest] +addopts = -vv --flake8