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