Title: [268319] trunk/Tools
Revision
268319
Author
jbed...@apple.com
Date
2020-10-11 09:12:38 -0700 (Sun, 11 Oct 2020)

Log Message

[webkitscmpy] Support json encoding of Commit object
https://bugs.webkit.org/show_bug.cgi?id=217533
<rdar://problem/70151709>

Reviewed by Dewei Zhu.

* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
(Commit.__repr__): Support identifiers being 0.
(Commit.Encoder): Encode commit as dictionary.
* Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (268318 => 268319)


--- trunk/Tools/ChangeLog	2020-10-11 10:26:11 UTC (rev 268318)
+++ trunk/Tools/ChangeLog	2020-10-11 16:12:38 UTC (rev 268319)
@@ -1,3 +1,17 @@
+2020-10-11  Jonathan Bedard  <jbed...@apple.com>
+
+        [webkitscmpy] Support json encoding of Commit object
+        https://bugs.webkit.org/show_bug.cgi?id=217533
+        <rdar://problem/70151709>
+
+        Reviewed by Dewei Zhu.
+
+        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
+        (Commit.__repr__): Support identifiers being 0.
+        (Commit.Encoder): Encode commit as dictionary.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
+
 2020-10-11  Yusuke Suzuki  <ysuz...@apple.com>
 
         Unreviewed, fix WK2 Debug test failures

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (268318 => 268319)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2020-10-11 10:26:11 UTC (rev 268318)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2020-10-11 16:12:38 UTC (rev 268319)
@@ -46,7 +46,7 @@
         "Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
     )
 
-version = Version(0, 1, 2)
+version = Version(0, 1, 3)
 
 AutoInstall.register(Package('dateutil', Version(2, 8, 1), pypi_name='python-dateutil'))
 

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py (268318 => 268319)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2020-10-11 10:26:11 UTC (rev 268318)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2020-10-11 16:12:38 UTC (rev 268319)
@@ -20,6 +20,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import json
 import six
 import re
 
@@ -33,6 +34,26 @@
     IDENTIFIER_RE = re.compile(r'^((?P<branch_point>\d+)\.)?(?P<identifier>-?\d+)(@(?P<branch>\S+))?$')
     NUMBER_RE = re.compile(r'^-?\d*$')
 
+    class Encoder(json.JSONEncoder):
+
+        def default(self, obj):
+            if not isinstance(obj, Commit):
+                return super(Commit.Encoder, self).default(obj)
+
+            result = dict()
+            for attribute in ['hash', 'revision', 'branch', 'timestamp', 'message']:
+                value = getattr(obj, attribute, None)
+                if value is not None:
+                    result[attribute] = value
+
+            if obj.author:
+                result['author'] = obj.author.email or obj.author.name
+
+            if obj.identifier is not None:
+                result['identifier'] = str(obj)
+
+            return result
+
     @classmethod
     def _parse_hash(cls, hash, do_assert=False):
         if hash is None:
@@ -214,15 +235,15 @@
         return result
 
     def __repr__(self):
-        if self.branch_point and self.identifier and self.branch:
+        if self.branch_point and self.identifier is not None and self.branch:
             return '{}.{}@{}'.format(self.branch_point, self.identifier, self.branch)
-        if self.identifier and self.branch:
+        if self.identifier is not None and self.branch:
             return '{}@{}'.format(self.identifier, self.branch)
         if self.revision:
             return 'r{}'.format(self.revision)
         if self.hash:
             return self.hash[:12]
-        if self.identifier:
+        if self.identifier is not None:
             return str(self.identifier)
         raise ValueError('Incomplete commit format')
 

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py (268318 => 268319)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2020-10-11 10:26:11 UTC (rev 268318)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2020-10-11 16:12:38 UTC (rev 268319)
@@ -20,6 +20,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import json
 import unittest
 
 from datetime import datetime
@@ -209,3 +210,49 @@
         Contributor.clear()
         with self.assertRaises(ValueError):
             Commit(revision=1, identifier=1, author='Jonathan Bedard')
+
+    def test_branch_point(self):
+        self.assertEqual('0', str(Commit(identifier=0)))
+        self.assertEqual('0@branch-a', str(Commit(identifier=0, branch='branch-a')))
+        self.assertEqual('1234.0@branch-a', str(Commit(branch_point=1234, identifier=0, branch='branch-a')))
+
+    def test_json_encode(self):
+        Contributor.clear()
+        contributor = Contributor.from_scm_log('Author: Jonathan Bedard <jbed...@apple.com>')
+
+        self.assertDictEqual(
+            dict(
+                revision=1,
+                hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+                branch='main',
+                identifier='1@main',
+                timestamp=1000,
+                author='jbed...@apple.com',
+                message='Message',
+            ), json.loads(json.dumps(Commit(
+                revision=1,
+                hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+                identifier='1@main',
+                timestamp=1000,
+                author=contributor,
+                message='Message'
+            ), cls=Commit.Encoder))
+        )
+
+    def test_json_decode(self):
+        Contributor.clear()
+        contributor = Contributor.from_scm_log('Author: Jonathan Bedard <jbed...@apple.com>')
+
+        commit_a = Commit(
+            revision=1,
+            hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+            identifier='1@main',
+            timestamp=1000,
+            author=contributor,
+            message='Message'
+        )
+
+        dictionary = json.loads(json.dumps(commit_a, cls=Commit.Encoder))
+        commit_b = Commit(**dictionary)
+
+        self.assertEqual(commit_a, commit_b)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to