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'
+ ),
+ )