예제 #1
0
    def compare_to(self, other, column, context_lines=4, template=False):
        """Compare the model with another revision.

        Special version to enable highlighting between files.

        :param other: The other model instance to compare with.
        :param column: A string what column to compare.
        :param context_lines: How many additional lines to show on the udiff.
        :param template: Either or not to prepare the udiff for templates use.
        """
        differ = generate_highlighted_udiff if template else generate_udiff

        generator = partial(differ,
            old=getattr(self, column, u''),
            new=getattr(other, column, u''),
            old_title=unicode(self),
            new_title=unicode(other),
            context_lines=context_lines)

        if template:
            udiff = generator(old_lang=self.language, new_lang=other.language)
        else:
            udiff = generator()

        if template:
            diff = prepare_udiff(udiff, True)
            return diff and diff[0] or None
        return udiff
예제 #2
0
    def compare_to(self, other, column, context_lines=4, template=False):
        """Compare the model with another revision.

        Special version to enable highlighting between files.

        :param other: The other model instance to compare with.
        :param column: A string what column to compare.
        :param context_lines: How many additional lines to show on the udiff.
        :param template: Either or not to prepare the udiff for templates use.
        """
        differ = generate_highlighted_udiff if template else generate_udiff

        generator = partial(differ,
                            old=getattr(self, column, u''),
                            new=getattr(other, column, u''),
                            old_title=unicode(self),
                            new_title=unicode(other),
                            context_lines=context_lines)

        if template:
            udiff = generator(old_lang=self.language, new_lang=other.language)
        else:
            udiff = generator()

        if template:
            diff = prepare_udiff(udiff, True)
            return diff and diff[0] or None
        return udiff
예제 #3
0
def test_diffrenderer():
    a = u'Paul\nJust changed\nA bit'
    b = u'Paul\nJast changed\nA bit'
    udiff = generate_udiff(a, b)
    expected = [{
        'chunks': [[
            {
                'new_lineno': 1,
                'action': 'unmod',
                'line': u'Paul',
                'old_lineno': 1
            },
            {
                'new_lineno': u'',
                'action': 'del',
                'line': u'J<del>u</del>st changed',
                'old_lineno': 2
            },
            {
                'new_lineno': 2,
                'action': 'add',
                'line': u'J<ins>a</ins>st changed',
                'old_lineno': u''
            },
            {
                'new_lineno': 3,
                'action': 'unmod',
                'line': u'A bit',
                'old_lineno': 3
            }
        ]],
        'old_revision': None,
        'new_revision': None,
        'filename': None
    }]
    eq_(DiffRenderer(udiff, True).prepare(), expected)

    # test that diff renderer can extract the hg revision and filename
    # This tests also for some broken udiff workarounds.
    udiff = u'''
Those are lines
that are
not counted
--- a/test1.py Tue May 25 22:04:11 2010 +0200
+++ b/test1.py Thu May 27 21:08:19 2010 +0200
@@ -1,3 +1,3 @@
 Paul
-Just changed
+Jast changed
 A bit'''

    expected[0]['old_revision'] = u'Tue May 25 22:04:11 2010 +0200'
    expected[0]['new_revision'] = u'Thu May 27 21:08:19 2010 +0200'
    expected[0]['filename'] = u'a/test1.py'
    eq_(DiffRenderer(udiff, True).prepare(), expected)

    # prepare_udiff does the same as DiffRenderer(udiff).prepare()
    eq_(prepare_udiff(udiff, True), expected)
예제 #4
0
def test_diffrenderer():
    a = u'Paul\nJust changed\nA bit'
    b = u'Paul\nJast changed\nA bit'
    udiff = generate_udiff(a, b)
    expected = [{
        'chunks': [[{
            'new_lineno': 1,
            'action': 'unmod',
            'line': u'Paul',
            'old_lineno': 1
        }, {
            'new_lineno': u'',
            'action': 'del',
            'line': u'J<del>u</del>st changed',
            'old_lineno': 2
        }, {
            'new_lineno': 2,
            'action': 'add',
            'line': u'J<ins>a</ins>st changed',
            'old_lineno': u''
        }, {
            'new_lineno': 3,
            'action': 'unmod',
            'line': u'A bit',
            'old_lineno': 3
        }]],
        'old_revision':
        None,
        'new_revision':
        None,
        'filename':
        None
    }]
    eq_(DiffRenderer(udiff, True).prepare(), expected)

    # test that diff renderer can extract the hg revision and filename
    # This tests also for some broken udiff workarounds.
    udiff = u'''
Those are lines
that are
not counted
--- a/test1.py Tue May 25 22:04:11 2010 +0200
+++ b/test1.py Thu May 27 21:08:19 2010 +0200
@@ -1,3 +1,3 @@
 Paul
-Just changed
+Jast changed
 A bit'''

    expected[0]['old_revision'] = u'Tue May 25 22:04:11 2010 +0200'
    expected[0]['new_revision'] = u'Thu May 27 21:08:19 2010 +0200'
    expected[0]['filename'] = u'a/test1.py'
    eq_(DiffRenderer(udiff, True).prepare(), expected)

    # prepare_udiff does the same as DiffRenderer(udiff).prepare()
    eq_(prepare_udiff(udiff, True), expected)