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

Changeset 273333 in webkit


Ignore:
Timestamp:
Feb 23, 2021, 2:22:25 PM (6 years ago)
Author:
Jonathan Bedard
Message:

[webkitscmpy] Add remote BitBucket
​https://bugs.webkit.org/show_bug.cgi?id=222213
<rdar://problem/74542626>

Rubber-stamped by Aakash Jain.

  • Scripts/libraries/webkitscmpy/setup.py: Increment version.
  • Scripts/libraries/webkitscmpy/webkitscmpy/init.py: Ditto.
  • Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/init.py: Export mock BitBucket.
  • Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py: Added.

(BitBucket): Mock limited set of BitBucket REST APIs.

  • Scripts/libraries/webkitscmpy/webkitscmpy/remote/init.py: Export BitBucket class.
  • Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py: Added.

(BitBucket): Repository object interacting with BitBucket via REST API.
(BitBucket.is_webserver): Check if the provided URL is a bitbucket URL.
(BitBucket.init):
(BitBucket.is_git):
(BitBucket.request): Combine paginated requests into a single API call.
(BitBucket._distance): Preform binary search
(BitBucket._branches_for): Return branches for reference.
(BitBucket.default_branch): Return the default branch.
(BitBucket.branches): Return all branches for repository.
(BitBucket.tags): Return all tags for repository.
(BitBucket.commit): Convert hash, identifier or git ref to Commit object.
(BitBucket.find): Use git to match branches and tags to a hash instead of trying to do it ourselves.

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

(Scm.from_url): Add BitBucket.

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

(TestGitHub.test_detection): Add bitbucket url.
(TestBitBucket): Added.

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

(TestRemoteSvn.test_detection): Add bitbucket url.

Location:
trunk/Tools
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r273331 r273333  
     12021-02-23  Jonathan Bedard  <jbedard@apple.com>
     2
     3        [webkitscmpy] Add remote BitBucket
     4        https://bugs.webkit.org/show_bug.cgi?id=222213
     5        <rdar://problem/74542626>
     6
     7        Rubber-stamped by Aakash Jain.
     8
     9        * Scripts/libraries/webkitscmpy/setup.py: Increment version.
     10        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
     11        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/__init__.py: Export mock BitBucket.
     12        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py: Added.
     13        (BitBucket): Mock limited set of BitBucket REST APIs.
     14        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/__init__.py: Export BitBucket class.
     15        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py: Added.
     16        (BitBucket): Repository object interacting with BitBucket via REST API.
     17        (BitBucket.is_webserver): Check if the provided URL is a bitbucket URL.
     18        (BitBucket.__init__):
     19        (BitBucket.is_git):
     20        (BitBucket.request): Combine paginated requests into a single API call.
     21        (BitBucket._distance): Preform binary search
     22        (BitBucket._branches_for): Return branches for reference.
     23        (BitBucket.default_branch): Return the default branch.
     24        (BitBucket.branches): Return all branches for repository.
     25        (BitBucket.tags): Return all tags for repository.
     26        (BitBucket.commit): Convert hash, identifier or git ref to Commit object.
     27        (BitBucket.find): Use git to match branches and tags to a hash instead of trying to do it ourselves.
     28        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
     29        (Scm.from_url): Add BitBucket.
     30        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
     31        (TestGitHub.test_detection): Add bitbucket url.
     32        (TestBitBucket): Added.
     33        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
     34        (TestRemoteSvn.test_detection): Add bitbucket url.
     35
    1362021-02-23  Don Olmstead  <don.olmstead@sony.com>
    237
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/__init__.py

    r270871 r273333  
    2121# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2222
     23from webkitscmpy.mocks.remote.bitbucket import BitBucket
    2324from webkitscmpy.mocks.remote.git_hub import GitHub
    2425from webkitscmpy.mocks.remote.svn import Svn
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/__init__.py

    r270871 r273333  
    2424from webkitscmpy.remote.svn import Svn
    2525from webkitscmpy.remote.git_hub import GitHub
     26from webkitscmpy.remote.bitbucket import BitBucket
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py

    r270871 r273333  
    3131        from webkitscmpy import remote
    3232
    33         if remote.Svn.is_webserver(url):
    34             return remote.Svn(url, contributors=contributors)
    35         if remote.GitHub.is_webserver(url):
    36             return remote.GitHub(url, contributors=contributors)
     33        for candidate in [remote.Svn, remote.GitHub, remote.BitBucket]:
     34            if candidate.is_webserver(url):
     35                return candidate(url, contributors=contributors)
     36
    3737        raise OSError("'{}' is not a known SCM server".format(url))
    3838
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py

    r271748 r273333  
    280280        self.assertEqual(remote.GitHub.is_webserver('http://github.example.com/WebKit/webkit'), True)
    281281        self.assertEqual(remote.GitHub.is_webserver('https://svn.example.org/repository/webkit'), False)
     282        self.assertEqual(remote.GitHub.is_webserver('https://bitbucket.example.com/projects/WebKit/repos/webkit'), False)
    282283
    283284    def test_branches(self):
    … …  
    379380            self.assertEqual(str(remote.GitHub(self.remote).find('4@trunk')), '4@main')
    380381            self.assertEqual(str(remote.GitHub(self.remote).find('4@master')), '4@main')
     382
     383
     384class TestBitBucket(unittest.TestCase):
     385    remote = 'https://bitbucket.example.com/projects/WEBKIT/repos/webkit'
     386
     387    def test_detection(self):
     388        self.assertEqual(remote.BitBucket.is_webserver('https://bitbucket.example.com/projects/WebKit/repos/webkit'), True)
     389        self.assertEqual(remote.BitBucket.is_webserver('http://bitbucket.example.com/projects/WebKit/repos/webkit'), True)
     390        self.assertEqual(remote.BitBucket.is_webserver('https://svn.example.org/repository/webkit'), False)
     391        self.assertEqual(remote.BitBucket.is_webserver('https://github.example.com/WebKit/webkit'), False)
     392
     393    def test_branches(self):
     394        with mocks.remote.BitBucket():
     395            self.assertEqual(
     396                remote.BitBucket(self.remote).branches,
     397                ['branch-a', 'branch-b', 'main'],
     398            )
     399
     400    def test_tags(self):
     401        with mocks.remote.BitBucket() as mock:
     402            mock.tags['tag-1'] = mock.commits['branch-a'][-1]
     403            mock.tags['tag-2'] = mock.commits['branch-b'][-1]
     404
     405            self.assertEqual(
     406                remote.BitBucket(self.remote).tags,
     407                ['tag-1', 'tag-2'],
     408            )
     409
     410    def test_scm_type(self):
     411        self.assertFalse(remote.BitBucket(self.remote).is_svn)
     412        self.assertTrue(remote.BitBucket(self.remote).is_git)
     413
     414    def test_commit_revision(self):
     415        with mocks.remote.BitBucket():
     416            self.assertEqual('1@main', str(remote.BitBucket(self.remote).commit(hash='9b8311f2')))
     417            self.assertEqual('2@main', str(remote.BitBucket(self.remote).commit(hash='fff83bb2')))
     418            self.assertEqual('2.1@branch-a', str(remote.BitBucket(self.remote).commit(hash='a30ce849')))
     419            self.assertEqual('3@main', str(remote.BitBucket(self.remote).commit(hash='1abe25b4')))
     420            self.assertEqual('2.2@branch-b', str(remote.BitBucket(self.remote).commit(hash='3cd32e35')))
     421            self.assertEqual('4@main', str(remote.BitBucket(self.remote).commit(hash='bae5d1e9')))
     422            self.assertEqual('2.2@branch-a', str(remote.BitBucket(self.remote).commit(hash='621652ad')))
     423            self.assertEqual('2.3@branch-b', str(remote.BitBucket(self.remote).commit(hash='790725a6')))
     424
     425    def test_commit_from_branch(self):
     426        with mocks.remote.BitBucket():
     427            self.assertEqual('4@main', str(remote.BitBucket(self.remote).commit(branch='main')))
     428            self.assertEqual('2.2@branch-a', str(remote.BitBucket(self.remote).commit(branch='branch-a')))
     429            self.assertEqual('2.3@branch-b', str(remote.BitBucket(self.remote).commit(branch='branch-b')))
     430
     431    def test_identifier(self):
     432        with mocks.remote.BitBucket():
     433            self.assertEqual(
     434                '9b8311f25a77ba14923d9d5a6532103f54abefcb',
     435                remote.BitBucket(self.remote).commit(identifier='1@main').hash,
     436            )
     437            self.assertEqual(
     438                'fff83bb2d9171b4d9196e977eb0508fd57e7a08d',
     439                remote.BitBucket(self.remote).commit(identifier='2@main').hash,
     440            )
     441            self.assertEqual(
     442                'a30ce8494bf1ac2807a69844f726be4a9843ca55',
     443                remote.BitBucket(self.remote).commit(identifier='2.1@branch-a').hash,
     444            )
     445            self.assertEqual(
     446                '1abe25b443e985f93b90d830e4a7e3731336af4d',
     447                remote.BitBucket(self.remote).commit(identifier='3@main').hash,
     448            )
     449            self.assertEqual(
     450                '3cd32e352410565bb543821fbf856a6d3caad1c4',
     451                remote.BitBucket(self.remote).commit(identifier='2.2@branch-b').hash,
     452            )
     453            self.assertEqual(
     454                'bae5d1e90999d4f916a8a15810ccfa43f37a2fd6',
     455                remote.BitBucket(self.remote).commit(identifier='4@main').hash,
     456            )
     457            self.assertEqual(
     458                '621652add7fc416099bd2063366cc38ff61afe36',
     459                remote.BitBucket(self.remote).commit(identifier='2.2@branch-a').hash,
     460            )
     461            self.assertEqual(
     462                '790725a6d79e28db2ecdde29548d2262c0bd059d',
     463                remote.BitBucket(self.remote).commit(identifier='2.3@branch-b').hash,
     464            )
     465
     466    def test_non_cannonical_identifiers(self):
     467        with mocks.remote.BitBucket():
     468            self.assertEqual('2@main', str(remote.BitBucket(self.remote).commit(identifier='0@branch-a')))
     469            self.assertEqual('1@main', str(remote.BitBucket(self.remote).commit(identifier='-1@branch-a')))
     470
     471            self.assertEqual('2@main', str(remote.BitBucket(self.remote).commit(identifier='0@branch-b')))
     472            self.assertEqual('1@main', str(remote.BitBucket(self.remote).commit(identifier='-1@branch-b')))
     473
     474    def test_tag(self):
     475        with mocks.remote.BitBucket() as mock:
     476            mock.tags['tag-1'] = mock.commits['branch-a'][-1]
     477
     478            self.assertEqual(
     479                '621652add7fc416099bd2063366cc38ff61afe36',
     480                remote.BitBucket(self.remote).commit(tag='tag-1').hash,
     481            )
     482
     483    def test_no_log(self):
     484        with mocks.remote.BitBucket():
     485            self.assertIsNone(remote.BitBucket(self.remote).commit(identifier='4@main', include_log=False).message)
     486
     487    def test_alternative_default_branch(self):
     488        with mocks.remote.BitBucket():
     489            self.assertEqual(str(remote.BitBucket(self.remote).find('4@trunk')), '4@main')
     490            self.assertEqual(str(remote.BitBucket(self.remote).find('4@master')), '4@main')
  • trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py

    r271748 r273333  
    236236        self.assertEqual(remote.Svn.is_webserver('http://svn.example.org/repository/webkit'), True)
    237237        self.assertEqual(remote.Svn.is_webserver('https://github.example.org/WebKit/webkit'), False)
     238        self.assertEqual(remote.GitHub.is_webserver('https://bitbucket.example.com/projects/WebKit/repos/webkit'), False)
    238239
    239240    def test_branches(self):
Note: See TracChangeset for help on using the changeset viewer.