Title: [284479] trunk/Tools
Revision
284479
Author
jbed...@apple.com
Date
2021-10-19 12:39:26 -0700 (Tue, 19 Oct 2021)

Log Message

[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:

Modified Paths

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'])])
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to