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)