Title: [274483] trunk/Tools
Revision
274483
Author
jbed...@apple.com
Date
2021-03-16 09:34:00 -0700 (Tue, 16 Mar 2021)

Log Message

[webkitscmpy] Decode multiple commit representations
https://bugs.webkit.org/show_bug.cgi?id=223224
<rdar://problem/75455129>

Reviewed by Dewei Zhu.

* Scripts/libraries/webkitscmpy/setup.py: Bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
* Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
(Commit.from_json): Decode old results database style commit representations.
* Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (274482 => 274483)


--- trunk/Tools/ChangeLog	2021-03-16 16:21:02 UTC (rev 274482)
+++ trunk/Tools/ChangeLog	2021-03-16 16:34:00 UTC (rev 274483)
@@ -1,3 +1,17 @@
+2021-03-16  Jonathan Bedard  <jbed...@apple.com>
+
+        [webkitscmpy] Decode multiple commit representations
+        https://bugs.webkit.org/show_bug.cgi?id=223224
+        <rdar://problem/75455129>
+
+        Reviewed by Dewei Zhu.
+
+        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
+        (Commit.from_json): Decode old results database style commit representations.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
+
 2021-03-16  Dean Johnson  <dean_john...@apple.com>
 
         [prepare-ChangeLog] Assigning a multiline comment to a variable breaks change detection

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/setup.py (274482 => 274483)


--- trunk/Tools/Scripts/libraries/webkitscmpy/setup.py	2021-03-16 16:21:02 UTC (rev 274482)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/setup.py	2021-03-16 16:34:00 UTC (rev 274483)
@@ -29,7 +29,7 @@
 
 setup(
     name='webkitscmpy',
-    version='0.13.1',
+    version='0.13.2',
     description='Library designed to interact with git and svn repositories.',
     long_description=readme(),
     classifiers=[

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (274482 => 274483)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2021-03-16 16:21:02 UTC (rev 274482)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2021-03-16 16:34:00 UTC (rev 274483)
@@ -46,7 +46,7 @@
         "Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
     )
 
-version = Version(0, 13, 1)
+version = Version(0, 13, 2)
 
 AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
 AutoInstall.register(Package('monotonic', Version(1, 5)))

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py (274482 => 274483)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2021-03-16 16:21:02 UTC (rev 274482)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2021-03-16 16:34:00 UTC (rev 274483)
@@ -146,6 +146,27 @@
             raise ValueError("'{}' cannot be converted to a commit object".format(arg))
         return None
 
+    @classmethod
+    def from_json(cls, data):
+        data = "" if isinstance(data, dict) else json.loads(data)
+        hash_from_id = None
+        revision_from_id = cls._parse_revision(data.get('id'))
+        if not revision_from_id:
+            hash_from_id = cls._parse_hash(data.get('id'))
+
+        return cls(
+            repository_id=data.get('repository_id'),
+            branch=data.get('branch'),
+            hash=data.get('hash', hash_from_id),
+            revision=data.get('revision', revision_from_id),
+            timestamp=data.get('timestamp'),
+            identifier=data.get('identifier'),
+            branch_point=data.get('branch_point'),
+            order=data.get('order'),
+            author=data.get('author', data.get('committer')),
+            message=data.get('message'),
+        )
+
     def __init__(
         self,
         hash=None,
@@ -184,10 +205,14 @@
                 ),
             )
 
+        if isinstance(timestamp, six.string_types) and timestamp.isdigit():
+            timestamp = int(timestamp)
         if timestamp and not isinstance(timestamp, int):
             raise TypeError("Expected 'timestamp' to be of type int, got '{}'".format(timestamp))
         self.timestamp = timestamp
 
+        if isinstance(order, six.string_types) and order.isdigit():
+            order = int(order)
         if order and not isinstance(order, int):
             raise TypeError("Expected 'order' to be of type int, got '{}'".format(order))
         self.order = order or 0
@@ -194,6 +219,8 @@
 
         if author and isinstance(author, dict) and author.get('name'):
             self.author = Contributor(author.get('name'), author.get('emails'))
+        elif author and isinstance(author, six.string_types) and '@' in author:
+            self.author = Contributor(author, author)
         elif author and not isinstance(author, Contributor):
             raise TypeError("Expected 'author' to be of type {}, got '{}'".format(Contributor, author))
         else:

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


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2021-03-16 16:21:02 UTC (rev 274482)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2021-03-16 16:34:00 UTC (rev 274483)
@@ -253,3 +253,48 @@
         commit_b = Commit(**dictionary)
 
         self.assertEqual(commit_a, commit_b)
+
+    def test_from_json(self):
+        self.assertEqual(
+            Commit.from_json(dict(
+                repository_id='webkit',
+                id=1234,
+                timestamp=1000,
+            )), Commit(
+                repository_id='webkit',
+                revision=1234,
+                timestamp=1000,
+            ),
+        )
+
+        self.assertEqual(
+            Commit.from_json(dict(
+                repository_id='webkit',
+                id='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+                timestamp=2000,
+            )), Commit(
+                repository_id='webkit',
+                hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+                timestamp=2000,
+            ),
+        )
+
+    def test_from_json_str(self):
+        contributor = Contributor.from_scm_log('Author: jbed...@apple.com <jbed...@apple.com>')
+        self.assertEqual(
+            Commit.from_json('''{
+    "revision": 1,
+    "hash": "c3bd784f8b88bd03f64467ddd3304ed8be28acbe",
+    "identifier": "1@main",
+    "timestamp": 1000,
+    "author": "jbed...@apple.com",
+    "message": "Message"
+}'''), Commit(
+                revision=1,
+                hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',
+                identifier='1@main',
+                timestamp=1000,
+                author=Contributor.Encoder().default(contributor),
+                message='Message'
+            ),
+        )
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to