Jeremy White : gitlab: Exclude the MR submitter from reviewers.
Alexandre Julliard
julliard at winehq.org
Thu Jul 28 14:48:29 CDT 2022
Module: tools
Branch: master
Commit: 34b1a84e0ca9f3327d63e78a78382500f7e8f449
URL: https://gitlab.winehq.org/winehq/tools/-/commit/34b1a84e0ca9f3327d63e78a78382500f7e8f449
Author: Jeremy White <jwhite at codeweavers.com>
Date: Thu Jul 28 09:36:09 2022 -0500
gitlab: Exclude the MR submitter from reviewers.
Also add a more full featured test mode.
---
gitlab/gitlab-to-mail/assign.py | 38 ++++++++++++++++++++++++++++++--------
1 file changed, 30 insertions(+), 8 deletions(-)
diff --git a/gitlab/gitlab-to-mail/assign.py b/gitlab/gitlab-to-mail/assign.py
index 4538a701..f5959d7a 100755
--- a/gitlab/gitlab-to-mail/assign.py
+++ b/gitlab/gitlab-to-mail/assign.py
@@ -10,6 +10,7 @@ import re
from urllib.parse import urljoin
import fnmatch
import requests
+import argparse
from util import fetch_all, Settings
@@ -23,6 +24,12 @@ def empty_record():
}
return copy.deepcopy(m)
+def add_but_exclude_author(out_ids, out_names, in_ids, in_names, author):
+ for i in range(len(in_ids)):
+ if in_names[i] != author:
+ out_ids.append(in_ids[i])
+ out_names.append(in_names[i])
+
class Assign:
settings = None
users = {}
@@ -96,7 +103,7 @@ class Assign:
r = requests.put(url, headers={"PRIVATE-TOKEN": self.settings.GITLAB_TOKEN}, json={'reviewer_ids': reviewers})
r.raise_for_status()
- def get_assignees_from_files(self, files):
+ def get_assignees_from_files(self, files, author):
maintainer_ids = []
people_ids = []
maintainer_names = []
@@ -105,10 +112,8 @@ class Assign:
for glob in m['globs']:
for f in files:
if fnmatch.fnmatch(f, glob):
- maintainer_ids = maintainer_ids + m['maintainer_ids']
- maintainer_names = maintainer_names + m['maintainers']
- people_ids = people_ids + m['people_ids']
- people_names = people_names + m['people']
+ add_but_exclude_author(maintainer_ids, maintainer_names, m['maintainer_ids'], m['maintainers'], author['name'])
+ add_but_exclude_author(people_ids, people_names, m['people_ids'], m['people'], author['name'])
if len(maintainer_ids) > 0:
return maintainer_ids, maintainer_names
return people_ids, people_names
@@ -129,7 +134,7 @@ class Assign:
return ids, names
def get_assignees(self, files, author, version):
- ids, names = self.get_assignees_from_files(files)
+ ids, names = self.get_assignees_from_files(files, author)
commit_ids, commit_names = self.get_assignees_from_commits(version)
return list(set(ids + commit_ids)), list(set(names + commit_names))
@@ -151,9 +156,26 @@ class Assign:
def main(argv):
""" Debug code; pass in a config file and the names of files you want to test """
- settings = Settings(argv[1])
+ parser = argparse.ArgumentParser(description="Debug code to test the assignment code")
+ parser.add_argument('settings', nargs=1)
+ parser.add_argument('--author', nargs=1, help='name of the person supposed to have submitted the MR')
+ parser.add_argument('--committer', action='append', help='repeat to specify multiple committers in our fake MR.')
+ parser.add_argument('files', nargs='*', help='name of Wine files supposedly in MR to pattern match')
+ args = parser.parse_args()
+ settings = Settings(args.settings)
+ print(args)
a = Assign(settings)
- ids, names = a.get_assignees_from_files(argv[2:])
+ if args.author:
+ author = { 'name': args.author[0] }
+ else:
+ author = { 'name': None }
+ version = { 'commits' : [] }
+ if args.committer:
+ for commit in args.committer:
+ vcommit = { 'author_name' : commit }
+ version['commits'].append(vcommit)
+ print(version)
+ ids, names = a.get_assignees(args.files, author, version)
for i in range(len(ids)):
print("{}: {}".format(ids[i], names[i]))
More information about the wine-cvs
mailing list