⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 283428 in webkit


Ignore:
Timestamp:
Oct 1, 2021, 5:53:30 PM (5 years ago)
Author:
Jonathan Bedard
Message:

[webkitscmpy] Get pull-request by number
https://bugs.webkit.org/show_bug.cgi?id=231039
<rdar://problem/83740215>

Reviewed by Stephanie Lewis.

  • Scripts/libraries/webkitscmpy/setup.py: Bump version.
  • Scripts/libraries/webkitscmpy/webkitscmpy/init.py: Ditto.
  • Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:

(GitHub.request): Add pull-request access by number.

  • Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:

(BitBucket.PRGenerator.PullRequest): Shared JSON pull-request generator.
(BitBucket.PRGenerator.get): Get pull-request by number.
(BitBucket.PRGenerator.find): Use shared pull-request generator.
(BitBucket.PRGenerator.create): Ditto.

  • Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:

(GitHub.PRGenerator.PullRequest): Shared JSON pull-request generator.
(GitHub.PRGenerator.get): Get pull-request by number.
(GitHub.PRGenerator.find): Use shared pull-request generator.
(GitHub.PRGenerator.create):

  • Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:

(Scm.PRGenerator.get):

  • Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

(TestNetworkPullRequestGitHub): Added.

Location:
trunk/Tools
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r283427 r283428  
     12021-10-01  Jonathan Bedard  <jbedard@apple.com>
     2
     3        [webkitscmpy] Get pull-request by number
     4        https://bugs.webkit.org/show_bug.cgi?id=231039
     5        <rdar://problem/83740215>
     6
     7        Reviewed by Stephanie Lewis.
     8
     9        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
     10        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
     11        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
     12        (GitHub.request): Add pull-request access by number.
     13        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
     14        (BitBucket.PRGenerator.PullRequest): Shared JSON pull-request generator.
     15        (BitBucket.PRGenerator.get): Get pull-request by number.
     16        (BitBucket.PRGenerator.find): Use shared pull-request generator.
     17        (BitBucket.PRGenerator.create): Ditto.
     18        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
     19        (GitHub.PRGenerator.PullRequest): Shared JSON pull-request generator.
     20        (GitHub.PRGenerator.get): Get pull-request by number.
     21        (GitHub.PRGenerator.find): Use shared pull-request generator.
     22        (GitHub.PRGenerator.create):
     23        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
     24        (Scm.PRGenerator.get):
     25        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
     26        (TestNetworkPullRequestGitHub): Added.
     27
    1282021-10-01  Alex Christensen  <achristensen@webkit.org>
    229
  • trunk/Tools/Scripts/libraries/webkitscmpy/setup.py

    r283373 r283428  
    3030setup(
    3131    name='webkitscmpy',
    32     version='2.2.3',
     32    version='2.2.4',
    3333    description='Library designed to interact with git and svn repositories.',
    3434    long_description=readme(),
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py

    r283373 r283428  
    4747    )
    4848
    49 version = Version(2, 2, 3)
     49version = Version(2, 2, 4)
    5050
    5151AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py

    r281695 r283428  
    336336            if username:
    337337                self.forks.append(username)
    338             return mocks.Response.fromJson({}) if username else mocks.Response.create404(url)
     338            return mocks.Response.fromJson({}, url=url) if username else mocks.Response.create404(url)
    339339
    340340        # All pull-requests
     
    353353                    continue
    354354                prs.append(candidate)
    355             return mocks.Response.fromJson(prs)
     355            return mocks.Response.fromJson(prs, url=url)
     356
     357        # Pull-request by number
     358        if method == 'GET' and stripped_url.startswith(pr_base):
     359            for candidate in self.pull_requests:
     360                if stripped_url.split('/')[-1] == str(candidate['number']):
     361                    return mocks.Response.fromJson(candidate, url=url)
     362            return mocks.Response.create404(url)
    356363
    357364        # Create/update pull-request
     
    380387            pr['user'] = dict(login=auth.username)
    381388            self.pull_requests.append(pr)
    382             return mocks.Response.fromJson(pr)
     389            return mocks.Response.fromJson(pr, url=url)
    383390
    384391        # Update specifically
     
    392399                return mocks.Response.create404(url)
    393400            self.pull_requests[existing].update(pr)
    394             return mocks.Response.fromJson(self.pull_requests[i])
     401            return mocks.Response.fromJson(self.pull_requests[i], url=url)
    395402
    396403        return mocks.Response.create404(url)
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py

    r283373 r283428  
    4040        BODY_CHAR_LIMIT = 32766
    4141
     42        def PullRequest(self, data):
     43            if not data:
     44                return None
     45            return PullRequest(
     46                number=data['id'],
     47                title=data.get('title'),
     48                body=data.get('description'),
     49                author=self.repository.contributors.create(
     50                    data['author']['user']['displayName'],
     51                    data['author']['user']['emailAddress'],
     52                ), head=data['fromRef']['displayId'],
     53                base=data['toRef']['displayId'],
     54            )
     55
     56        def get(self, number):
     57            return self.PullRequest(self.repository.request('pull-requests/{}'.format(int(number))))
     58
    4259        def find(self, state=None, head=None, base=None):
    4360            params = dict(
     
    5774                if base and not datum['toRef']['id'].endswith(base):
    5875                    continue
    59                 yield PullRequest(
    60                     number=datum['id'],
    61                     title=datum.get('title'),
    62                     body=datum.get('description'),
    63                     author=self.repository.contributors.create(
    64                         datum['author']['user']['displayName'],
    65                         datum['author']['user']['emailAddress'],
    66                     ), head=datum['fromRef']['displayId'],
    67                     base=datum['toRef']['displayId'],
    68                 )
     76                yield self.PullRequest(datum)
    6977
    7078        def create(self, head, title, body=None, commits=None, base=None):
     
    103111            if response.status_code // 100 != 2:
    104112                return None
    105             data = response.json()
    106             return PullRequest(
    107                 number=data['id'],
    108                 title=data.get('title'),
    109                 body=data.get('description'),
    110                 author=self.repository.contributors.create(
    111                     data['author']['user']['displayName'],
    112                     data['author']['user']['emailAddress'],
    113                 ), head=data['fromRef']['displayId'],
    114                 base=data['toRef']['displayId'],
    115             )
     113            return self.PullRequest(response.json())
    116114
    117115        def update(self, pull_request, head=None, title=None, body=None, commits=None, base=None):
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py

    r281695 r283428  
    4040
    4141    class PRGenerator(Scm.PRGenerator):
     42        def PullRequest(self, data):
     43            if not data:
     44                return None
     45            return PullRequest(
     46                number=data['number'],
     47                title=data.get('title'),
     48                body=data.get('body'),
     49                author=self.repository.contributors.create(data['user']['login']),
     50                head=data['head']['ref'],
     51                base=data['base']['ref'],
     52            )
     53
     54        def get(self, number):
     55            return self.PullRequest(self.repository.request('pulls/{}'.format(int(number))))
     56
    4257        def find(self, state=None, head=None, base=None):
    4358            if not state:
     
    5267                if base and datum['base']['ref'] != base:
    5368                    continue
    54                 if head and not datum['head']['ref'].endswith(head):
     69                if head and not datum['head']['ref'].endswith(head.split(':')[-1]):
    5570                    continue
    56                 yield PullRequest(
    57                     number=datum['number'],
    58                     title=datum.get('title'),
    59                     body=datum.get('body'),
    60                     author=self.repository.contributors.create(datum['user']['login']),
    61                     head=datum['head']['ref'],
    62                     base=datum['base']['ref'],
    63                 )
     71                yield self.PullRequest(datum)
    6472
    6573        def create(self, head, title, body=None, commits=None, base=None):
     
    8593            if response.status_code // 100 != 2:
    8694                return None
    87             data = response.json()
    88             return PullRequest(
    89                 number=data['number'],
    90                 title=data.get('title'),
    91                 body=data.get('body'),
    92                 author=self.repository.contributors.create(data['user']['login']),
    93                 head=data['head']['ref'],
    94                 base=data['base']['ref'],
    95             )
     95            return self.PullRequest(response.json())
    9696
    9797        def update(self, pull_request, head=None, title=None, body=None, commits=None, base=None):
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py

    r281695 r283428  
    3131            self.repository = repository
    3232
     33        def get(self, number):
     34            raise NotImplementedError()
     35
    3336        def find(self, state=None, head=None, base=None):
    3437            raise NotImplementedError()
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py

    r283373 r283428  
    2626
    2727from webkitcorepy import OutputCapture, testing
    28 from webkitscmpy import Commit, PullRequest, program, mocks
     28from webkitscmpy import Commit, PullRequest, program, mocks, remote
    2929
    3030
     
    426426            ],
    427427        )
     428
     429
     430class TestNetworkPullRequestGitHub(unittest.TestCase):
     431    remote = 'https://github.example.com/WebKit/WebKit'
     432
     433    @classmethod
     434    def webserver(cls):
     435        result = mocks.remote.GitHub()
     436        result.pull_requests = [dict(
     437            number=1,
     438            state='open',
     439            title='Example Change',
     440            user=dict(login='tcontributor'),
     441            body='''#### 95507e3a1a4a919d1a156abbc279fdf6d24b13f5
     442<pre>
     443Example Change
     444<a href="https://bugs.webkit.org/show_bug.cgi?id=1234">https://bugs.webkit.org/show_bug.cgi?id=1234</a>
     445
     446Reviewed by NOBODY (OOPS!).
     447
     448* Source/file.cpp:
     449</pre>
     450''',
     451            head=dict(ref='eng/pull-request'),
     452            base=dict(ref='main'),
     453        )]
     454        return result
     455
     456    def test_find(self):
     457        with self.webserver():
     458            prs = list(remote.GitHub(self.remote).pull_requests.find())
     459            self.assertEqual(len(prs), 1)
     460            self.assertEqual(prs[0].number, 1)
     461            self.assertEqual(prs[0].title, 'Example Change')
     462            self.assertEqual(prs[0].head, 'eng/pull-request')
     463            self.assertEqual(prs[0].base, 'main')
     464
     465    def test_get(self):
     466        with self.webserver():
     467            pr = remote.GitHub(self.remote).pull_requests.get(1)
     468            self.assertEqual(pr.number, 1)
     469            self.assertEqual(pr.title, 'Example Change')
     470            self.assertEqual(pr.head, 'eng/pull-request')
     471            self.assertEqual(pr.base, 'main')
     472
     473
     474class TestNetworkPullRequestBitBucket(unittest.TestCase):
     475    remote = 'https://bitbucket.example.com/projects/WEBKIT/repos/webkit'
     476
     477    @classmethod
     478    def webserver(cls):
     479        result = mocks.remote.BitBucket()
     480        result.pull_requests = [dict(
     481            id=1,
     482            state='OPEN',
     483            title='Example Change',
     484            author=dict(
     485                user=dict(
     486                    name='tcontributor',
     487                    emailAddress='tcontributor@apple.com',
     488                    displayName='Tim Contributor',
     489                ),
     490            ), body='''#### 95507e3a1a4a919d1a156abbc279fdf6d24b13f5
     491```
     492Example Change
     493https://bugs.webkit.org/show_bug.cgi?id=1234
     494
     495Reviewed by NOBODY (OOPS!).
     496
     497* Source/file.cpp:
     498```
     499''',
     500            fromRef=dict(displayId='eng/pull-request'),
     501            toRef=dict(displayId='main'),
     502        )]
     503        return result
     504
     505    def test_find(self):
     506        with self.webserver():
     507            with self.webserver():
     508                prs = list(remote.BitBucket(self.remote).pull_requests.find())
     509                self.assertEqual(len(prs), 1)
     510                self.assertEqual(prs[0].number, 1)
     511                self.assertEqual(prs[0].title, 'Example Change')
     512                self.assertEqual(prs[0].head, 'eng/pull-request')
     513                self.assertEqual(prs[0].base, 'main')
     514
     515    def test_get(self):
     516        with self.webserver():
     517            pr = remote.BitBucket(self.remote).pull_requests.get(1)
     518            self.assertEqual(pr.number, 1)
     519            self.assertEqual(pr.title, 'Example Change')
     520            self.assertEqual(pr.head, 'eng/pull-request')
     521            self.assertEqual(pr.base, 'main')
Note: See TracChangeset for help on using the changeset viewer.