Diff
Modified: trunk/Tools/ChangeLog (284478 => 284479)
--- trunk/Tools/ChangeLog 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/ChangeLog 2021-10-19 19:39:26 UTC (rev 284479)
@@ -1,3 +1,26 @@
+2021-10-19 Jonathan Bedard <jbed...@apple.com>
+
+ [webkitscmpy] Filter approvers by status
+ https://bugs.webkit.org/show_bug.cgi?id=231843
+ <rdar://problem/84320934>
+
+ Reviewed by Dewei Zhu.
+
+ If a project defines statuses for it's contributors, we only want
+ to allow reviewers to approve changes.
+
+ * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
+ (Contributor): Add reviewer status.
+ (Contributor.Mapping.load): Keep track of possible statuses.
+ (Contributor.Mapping.__init__): Ditto.
+ (Contributor.Mapping.add): Ditto.
+ * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
+ (BitBucket.PRGenerator.PullRequest): If a project defines a reviewer status, enforce it.
+ * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
+ (GitHub.PRGenerator._contributor): Handle case where no name is defined.
+ (GitHub.PRGenerator.reviewers): If a project defines a reviewer status, enforce it.
+ * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
+
2021-10-19 Alex Christensen <achristen...@webkit.org>
Fix iOS API tests after r284304
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/setup.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/setup.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/setup.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -29,7 +29,7 @@
setup(
name='webkitscmpy',
- version='2.2.12',
+ version='2.2.13',
description='Library designed to interact with git and svn repositories.',
long_description=readme(),
classifiers=[
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -46,7 +46,7 @@
"Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
)
-version = Version(2, 2, 12)
+version = Version(2, 2, 13)
AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
AutoInstall.register(Package('monotonic', Version(1, 5)))
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -35,6 +35,7 @@
SVN_AUTHOR_RE = re.compile(r'r(?P<revision>\d+) \| (?P<email>.*) \| (?P<date>.*) \| \d+ lines?')
SVN_AUTHOR_Q_RE = re.compile(r'r(?P<revision>\d+) \| (?P<email>.*) \| (?P<date>.*)')
SVN_PATCH_FROM_RE = re.compile(r'Patch by (?P<author>.*) <(?P<email>.*)> on \d+-\d+-\d+')
+ REVIEWER = 'reviewer'
class Encoder(json.JSONEncoder):
@@ -68,6 +69,8 @@
created.github = contributor.get('github', created.github)
created.bitbucket = contributor.get('bitbucket', created.bitbucket)
+ result.statuses.add(created.status)
+
if created.github:
result[created.github] = created
if created.bitbucket:
@@ -85,6 +88,7 @@
def __init__(self):
super(Contributor.Mapping, self).__init__(lambda: None)
+ self.statuses = set()
def save(self, file):
alias_to_name = defaultdict(list)
@@ -111,6 +115,8 @@
result.github = contributor.github or result.github
result.bitbucket = contributor.bitbucket or result.bitbucket
+ self.statuses.add(result.status)
+
if result.github:
self[result.github] = result
if result.bitbucket:
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -25,10 +25,8 @@
import six
import sys
-import json
-
from webkitcorepy import decorators
-from webkitscmpy import Commit, PullRequest
+from webkitscmpy import Commit, Contributor, PullRequest
from webkitscmpy.remote.scm import Scm
@@ -58,6 +56,7 @@
result._reviewers = []
result._approvers = []
result._blockers = []
+ needs_status = Contributor.REVIEWER in self.repository.contributors.statuses
for rdata in data.get('reviewers', []):
reviewer = self.repository.contributors.create(
rdata['user']['displayName'],
@@ -64,7 +63,7 @@
rdata['user'].get('emailAddress', None),
)
result._reviewers.append(reviewer)
- if rdata.get('approved', False):
+ if rdata.get('approved', False) and (not needs_status or reviewer.status == Contributor.REVIEWER):
result._approvers.append(reviewer)
if rdata.get('status') == 'NEEDS_WORK':
result._blockers.append(reviewer)
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -162,7 +162,7 @@
return Contributor(username)
data = ""
- result = self.repository.contributors.create(data.get('name', username), data.get('email'))
+ result = self.repository.contributors.create(data.get('name', username) or username, data.get('email'))
result.github = username
self.repository.contributors[username] = result
return result
@@ -172,10 +172,11 @@
pull_request._reviewers = [self._contributor(user['login']) for user in response.get('users', [])]
pull_request._approvers = []
pull_request._blockers = []
+ needs_status = Contributor.REVIEWER in self.repository.contributors.statuses
for review in self.repository.request('pulls/{}/reviews'.format(pull_request.number)):
contributor = self._contributor(review['user']['login'])
pull_request._reviewers.append(contributor)
- if review.get('state') == 'APPROVED':
+ if review.get('state') == 'APPROVED' and (not needs_status or contributor.status == Contributor.REVIEWER):
pull_request._approvers.append(contributor)
elif review.get('state') == 'CHANGES_REQUESTED':
pull_request._blockers.append(contributor)
Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py (284478 => 284479)
--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py 2021-10-19 19:28:40 UTC (rev 284478)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py 2021-10-19 19:39:26 UTC (rev 284479)
@@ -493,7 +493,23 @@
self.assertEqual(pr.approvers, [Contributor('Eager Reviewer', ['erevie...@webkit.org'])])
self.assertEqual(pr.blockers, [Contributor('Suspicious Reviewer', ['srevie...@webkit.org'])])
+ def test_approvers_status(self):
+ with self.webserver():
+ repo = remote.GitHub(self.remote)
+ repo.contributors.add(Contributor(
+ 'Suspicious Reviewer', ['srevie...@webkit.org'],
+ github='sreviewer', status=Contributor.REVIEWER,
+ ))
+ pr = repo.pull_requests.get(1)
+ self.assertEqual(pr.reviewers, [
+ Contributor('Eager Reviewer', ['erevie...@webkit.org']),
+ Contributor('Reluctant Reviewer', ['rrevie...@webkit.org']),
+ Contributor('Suspicious Reviewer', ['srevie...@webkit.org']),
+ ])
+ self.assertEqual(pr.approvers, [])
+ self.assertEqual(pr.blockers, [Contributor('Suspicious Reviewer', ['srevie...@webkit.org'])])
+
class TestNetworkPullRequestBitBucket(unittest.TestCase):
remote = 'https://bitbucket.example.com/projects/WEBKIT/repos/webkit'
@@ -574,3 +590,19 @@
])
self.assertEqual(pr.approvers, [Contributor('Eager Reviewer', ['erevie...@webkit.org'])])
self.assertEqual(pr.blockers, [Contributor('Suspicious Reviewer', ['srevie...@webkit.org'])])
+
+ def test_approvers_status(self):
+ with self.webserver():
+ repo = remote.BitBucket(self.remote)
+ repo.contributors.add(Contributor(
+ 'Suspicious Reviewer', ['srevie...@webkit.org'],
+ github='sreviewer', status=Contributor.REVIEWER,
+ ))
+ pr = repo.pull_requests.get(1)
+ self.assertEqual(pr.reviewers, [
+ Contributor('Eager Reviewer', ['erevie...@webkit.org']),
+ Contributor('Reluctant Reviewer', ['rrevie...@webkit.org']),
+ Contributor('Suspicious Reviewer', ['srevie...@webkit.org']),
+ ])
+ self.assertEqual(pr.approvers, [])
+ self.assertEqual(pr.blockers, [Contributor('Suspicious Reviewer', ['srevie...@webkit.org'])])