5. Example DiffX Files#
5.1. Diff of Local File#
#diffx: encoding=utf-8, version=1.0
#.change:
#..file:
#...meta: format=json, length=82
{
"path": {
"new": "message2.py",
"old": "message.py"
}
}
#...diff: length=692
--- message.py 2021-07-02 13:20:12.285875444 -0700
+++ message2.py 2021-07-02 13:21:31.428383873 -0700
@@ -164,10 +164,10 @@
not isinstance(headers, MultiValueDict)):
# Instantiating a MultiValueDict from a dict does not ensure that
# values are lists, so we have to ensure that ourselves.
- headers = MultiValueDict(dict(
- (key, [value])
- for key, value in six.iteritems(headers)
- ))
+ headers = MultiValueDict({
+ key: [value]
+ for key, value in headers.items()
+ })
if in_reply_to:
headers['In-Reply-To'] = in_reply_to
5.2. Diff of File in a Repository#
#diffx: encoding=utf-8, version=1.0
#.change:
#..file:
#...meta: format=json, length=176
{
"path": "/src/message.py",
"revision": {
"new": "f814cf74766ba3e6d175254996072233ca18a690",
"old": "9f6a412b3aee0a55808928b43f848202b4ee0f8d"
}
}
#...diff: length=631
--- a/src/message.py
+++ b/src/message.py
@@ -164,10 +164,10 @@
not isinstance(headers, MultiValueDict)):
# Instantiating a MultiValueDict from a dict does not ensure that
# values are lists, so we have to ensure that ourselves.
- headers = MultiValueDict(dict(
- (key, [value])
- for key, value in six.iteritems(headers)
- ))
+ headers = MultiValueDict({
+ key: [value]
+ for key, value in headers.items()
+ })
if in_reply_to:
headers['In-Reply-To'] = in_reply_to
5.3. Diff of Commit in a Repository#
#diffx: encoding=utf-8, version=1.0
#.change:
#..preamble: indent=4, length=319, mimetype=text/markdown
Convert legacy header building code to Python 3.
Header building for messages used old Python 2.6-era list comprehensions
with tuples rather than modern dictionary comprehensions in order to build
a message list. This change modernizes that, and swaps out six for a
3-friendly `.items()` call.
#..meta: format=json, length=270
{
"author": "Christian Hammond <christian@example.com>",
"committer": "Christian Hammond <christian@example.com>",
"committer date": "2021-06-02T13:12:06-07:00",
"date": "2021-06-01T19:26:31-07:00",
"id": "a25e7b28af5e3184946068f432122c68c1a30b23"
}
#..file:
#...meta: format=json, length=176
{
"path": "/src/message.py",
"revision": {
"new": "f814cf74766ba3e6d175254996072233ca18a690",
"old": "9f6a412b3aee0a55808928b43f848202b4ee0f8d"
}
}
#...diff: length=629
--- /src/message.py
+++ /src/message.py
@@ -164,10 +164,10 @@
not isinstance(headers, MultiValueDict)):
# Instantiating a MultiValueDict from a dict does not ensure that
# values are lists, so we have to ensure that ourselves.
- headers = MultiValueDict(dict(
- (key, [value])
- for key, value in six.iteritems(headers)
- ))
+ headers = MultiValueDict({
+ key: [value]
+ for key, value in headers.items()
+ })
if in_reply_to:
headers['In-Reply-To'] = in_reply_to
5.4. Diff of Multiple Commits in a Repository#
#diffx: encoding=utf-8, version=1.0
#.change:
#..preamble: indent=4, length=338, mimetype=text/markdown
Pass extra keyword arguments in create_diffset() to the DiffSet model.
The `create_diffset()` unit test helper function took a fixed list of
arguments, preventing unit tests from passing in any other arguments
to the `DiffSet` constructor. This now passes any extra keyword arguments,
future-proofing this a bit.
#..meta: format=json, length=270
{
"author": "Christian Hammond <christian@example.com>",
"committer": "Christian Hammond <christian@example.com>",
"committer date": "2021-06-02T13:12:06-07:00",
"date": "2021-06-01T19:26:31-07:00",
"id": "a25e7b28af5e3184946068f432122c68c1a30b23"
}
#..file:
#...meta: format=json, length=185
{
"path": "/src/testing/testcase.py",
"revision": {
"new": "eed8df7f1400a95cdf5a87ddb947e7d9c5a19cef",
"old": "c8839177d1a5605aa60abe69db95c84183f0eebe"
}
}
#...diff: length=819
--- /src/testing/testcase.py
+++ /src/testing/testcase.py
@@ -498,7 +498,7 @@ class TestCase(FixturesCompilerMixin, DjbletsTestCase):
**kwargs)
def create_diffset(self, review_request=None, revision=1, repository=None,
- draft=False, name='diffset'):
+ draft=False, name='diffset', **kwargs):
"""Creates a DiffSet for testing.
The DiffSet defaults to revision 1. This can be overriden by the
@@ -513,7 +513,8 @@ class TestCase(FixturesCompilerMixin, DjbletsTestCase):
name=name,
revision=revision,
repository=repository,
- diffcompat=DiffCompatVersion.DEFAULT)
+ diffcompat=DiffCompatVersion.DEFAULT,
+ **kwargs)
if review_request:
if draft:
#.change:
#..preamble: indent=4, length=219, mimetype=text/markdown
Set a diff description when creating a DiffSet in chunk generator tests.
This makes use of the new `**kwargs` support in `create_diffset()` in
a unit test to set a description of the diff, for testing.
#..meta: format=json, length=270
{
"author": "Christian Hammond <christian@example.com>",
"committer": "Christian Hammond <christian@example.com>",
"committer date": "2021-06-02T19:13:08-07:00",
"date": "2021-06-02T14:19:45-07:00",
"id": "a25e7b28af5e3184946068f432122c68c1a30b23"
}
#..file:
#...meta: format=json, length=211
{
"path": "/src/diffviewer/tests/test_diff_chunk_generator.py",
"revision": {
"new": "a2ccb0cb48383472345d41a32afde39a7e6a72dd",
"old": "1b7af7f97076effed5db722afe31c993e6adbc78"
}
}
#...diff: length=662
--- a/src/diffviewer/tests/test_diff_chunk_generator.py
+++ b/src/diffviewer/tests/test_diff_chunk_generator.py
@@ -66,7 +66,8 @@ class DiffChunkGeneratorTests(SpyAgency, TestCase):
super(DiffChunkGeneratorTests, self).setUp()
self.repository = self.create_repository(tool_name='Test')
- self.diffset = self.create_diffset(repository=self.repository)
+ self.diffset = self.create_diffset(repository=self.repository,
+ description=self.diff_description)
self.filediff = self.create_filediff(diffset=self.diffset)
self.generator = DiffChunkGenerator(None, self.filediff)
#..file:
#...meta: format=json, length=200
{
"path": "/src/diffviewer/tests/test_diffutils.py",
"revision": {
"new": "0d4a0fb8d62b762a26e13591d06d93d79d61102f",
"old": "be089b7197974703c83682088a068bef3422c6c2"
}
}
#...diff: length=567
--- a/src/diffviewer/tests/test_diffutils.py
+++ b/src/diffviewer/tests/test_diffutils.py
@@ -258,7 +258,8 @@ class BaseFileDiffAncestorTests(SpyAgency, TestCase):
owner=Repository,
call_fake=lambda *args, **kwargs: True)
- self.diffset = self.create_diffset(repository=self.repository)
+ self.diffset = self.create_diffset(repository=self.repository,
+ description='Test Diff')
for i, diff in enumerate(self._COMMITS, 1):
commit_id = 'r%d' % i
5.5. Wrapped Git Diff#
#diffx: encoding=utf-8, version=1.0
#.change:
#..preamble: length=352
commit 89a3a4ab76496079f3bb3073b3a04aacaa8bbee4
Author: Christian Hammond <christian@example.com>
Date: Wed Jun 2 19:13:08 2021 -0700
Set a diff description when creating a DiffSet in chunk generator tests.
This makes use of the new `**kwargs` support in `create_diffset()` in
a unit test to set a description of the diff, for testing.
#..meta: format=json, length=270
{
"author": "Christian Hammond <christian@example.com>",
"committer": "Christian Hammond <christian@example.com>",
"committer date": "2021-06-02T19:13:08-07:00",
"date": "2021-06-02T14:19:45-07:00",
"id": "a25e7b28af5e3184946068f432122c68c1a30b23"
}
#..file:
#...meta: format=json, length=211
{
"path": "/src/diffviewer/tests/test_diff_chunk_generator.py",
"revision": {
"new": "a2ccb0cb48383472345d41a32afde39a7e6a72dd",
"old": "1b7af7f97076effed5db722afe31c993e6adbc78"
}
}
#...diff: length=814
diff --git a/src/diffviewer/tests/test_diff_chunk_generator.py
index 1b7af7f97076effed5db722afe31c993e6adbc78..a2ccb0cb48383472345d41a32afde39a7e6a72dd
--- a/src/diffviewer/tests/test_diff_chunk_generator.py
+++ b/src/diffviewer/tests/test_diff_chunk_generator.py
@@ -66,7 +66,8 @@ class DiffChunkGeneratorTests(SpyAgency, TestCase):
super(DiffChunkGeneratorTests, self).setUp()
self.repository = self.create_repository(tool_name='Test')
- self.diffset = self.create_diffset(repository=self.repository)
+ self.diffset = self.create_diffset(repository=self.repository,
+ description=self.diff_description)
self.filediff = self.create_filediff(diffset=self.diffset)
self.generator = DiffChunkGenerator(None, self.filediff)
5.6. Wrapped CVS Diff#
#diffx: encoding=utf-8, version=1.0
#.change:
#..file:
#...meta: format=json, length=94
{
"path": "/readme",
"revision": {
"new": "1.2",
"old": "1.1"
}
}
#...diff: length=320
Index: readme
===================================================================
RCS file: /cvsroot/readme,v
retrieving version 1.1
retrieving version 1.2
diff -u -p -r1.1 -r1.2
--- readme 26 Jan 2016 16:29:12 -0000 1.1
+++ readme 31 Jan 2016 11:54:32 -0000 1.2
@@ -1 +1,3 @@
Hello there
+
+Oh hi!
5.7. Wrapped Subversion Property Diff#
#diffx: encoding=utf-8, version=1.0
#.change:
#..file:
#...meta: format=json, length=269
{
"path": "/readme",
"revision": {
"old": "123"
},
"svn": {
"properties": {
"myproperty": {
"new": "new value",
"old": "old value"
}
}
},
"type": "svn:properties"
}
#...diff: length=266
Index: readme
===================================================================
--- (revision 123)
+++ (working copy)
Property changes on: .
-------------------------------------------------------------------
Modified: myproperty
## -1 +1 ##
-old value
+new value