def test_diff(self):
        fwd = helper.fixture("diff.txt")
        reverse = helper.fixture("diff-reverse.txt")
        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename="", cached=False, reverse=False, diff_source=source)

        self.assertEqual(parser.offsets(), [916, 1798, 2550])
        self.assertEqual(parser.spans(), [[0, 916], [916, 1798], [1798, 2550]])

        diffs = parser.diffs()
        self.assertEqual(len(diffs), 3)

        self.assertEqual(len(diffs[0]), 23)
        self.assertEqual(diffs[0][0], "@@ -6,10 +6,21 @@ from cola import gitcmds")
        self.assertEqual(diffs[0][1], " from cola import gitcfg")
        self.assertEqual(diffs[0][2], " ")
        self.assertEqual(diffs[0][3], " ")
        self.assertEqual(diffs[0][4], "+class DiffSource(object):")

        self.assertEqual(len(diffs[1]), 18)
        self.assertEqual(diffs[1][0], "@@ -29,13 +40,11 @@ class DiffParser(object):")
        self.assertEqual(diffs[1][1], "         self.diff_sel = []")
        self.assertEqual(diffs[1][2], "         self.selected = []")
        self.assertEqual(diffs[1][3], "         self.filename = filename")
        self.assertEqual(diffs[1][4], "+        self.diff_source = diff_source or DiffSource()")

        self.assertEqual(len(diffs[2]), 18)
        self.assertEqual(diffs[2][0], "@@ -43,11 +52,10 @@ class DiffParser(object):")
Beispiel #2
0
 def do(self):
     if self.model.mode == self.model.mode_branch:
         # We're applying changes from a different branch!
         parser = DiffParser(self.model,
                             filename=self.model.filename,
                             cached=False,
                             branch=self.model.head)
         status, output = \
         parser.process_diff_selection(self.selected,
                                       self.offset,
                                       self.selection,
                                       apply_to_worktree=True)
     else:
         # The normal worktree vs index scenario
         parser = DiffParser(self.model,
                             filename=self.model.filename,
                             cached=self.staged,
                             reverse=self.apply_to_worktree)
         status, output = \
         parser.process_diff_selection(self.selected,
                                       self.offset,
                                       self.selection,
                                       apply_to_worktree=
                                           self.apply_to_worktree)
     _notifier.broadcast(signals.log_cmd, status, output)
     # Redo the diff to show changes
     if self.staged:
         diffcmd = DiffStaged([self.model.filename])
     else:
         diffcmd = Diff([self.model.filename])
     diffcmd.do()
     self.model.update_file_status()
Beispiel #3
0
    def test_diff_at_start(self):
        fixture_path = helper.fixture('diff-start.txt')
        parser = DiffParser('foo bar/a', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(hunks[0].lines[0], '@@ -1 +1,4 @@')
        self.assertEqual(hunks[-1].lines[-1], '+c')
        self.assertEqual(hunks[0].old_start, 1)
        self.assertEqual(hunks[0].old_count, 1)
        self.assertEqual(hunks[0].new_start, 1)
        self.assertEqual(hunks[0].new_count, 4)
        self.assertEqual(parser.generate_patch(1, 3),
                         '--- a/foo bar/a\n'
                         '+++ b/foo bar/a\n'
                         '@@ -1 +1,3 @@\n'
                         ' bar\n'
                         '+a\n'
                         '+b\n')
        self.assertEqual(parser.generate_patch(0, 4),
                         '--- a/foo bar/a\n'
                         '+++ b/foo bar/a\n'
                         '@@ -1 +1,4 @@\n'
                         ' bar\n'
                         '+a\n'
                         '+b\n'
                         '+c\n')
Beispiel #4
0
    def test_diff_that_empties_file(self):
        fixture_path = helper.fixture('diff-empty.txt')
        parser = DiffParser('filename', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(hunks[0].lines[0],
                '@@ -1,2 +0,0 @@')
        self.assertEqual(hunks[-1].lines[-1],
                '-second')
        self.assertEqual(hunks[0].old_start, 1)
        self.assertEqual(hunks[0].old_count, 2)
        self.assertEqual(hunks[0].new_start, 0)
        self.assertEqual(hunks[0].new_count, 0)
        self.assertEqual(parser.generate_patch(1, 1),
                         '--- a/filename\n'
                         '+++ b/filename\n'
                         '@@ -1,2 +1 @@\n'
                         '-first\n'
                         ' second\n')
        self.assertEqual(parser.generate_patch(0, 2),
                         '--- a/filename\n'
                         '+++ b/filename\n'
                         '@@ -1,2 +0,0 @@\n'
                         '-first\n'
                         '-second\n')
    def test_diff_that_empties_file(self):
        fixture_path = helper.fixture('diff-empty.txt')
        parser = DiffParser('filename', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(hunks[0].lines[0],
                '@@ -1,2 +0,0 @@')
        self.assertEqual(hunks[-1].lines[-1],
                '-second')
        self.assertEqual(hunks[0].old_start, 1)
        self.assertEqual(hunks[0].old_count, 2)
        self.assertEqual(hunks[0].new_start, 0)
        self.assertEqual(hunks[0].new_count, 0)
        self.assertEqual(parser.generate_patch(1, 1),
                         '--- a/filename\n'
                         '+++ b/filename\n'
                         '@@ -1,2 +1 @@\n'
                         '-first\n'
                         ' second\n')
        self.assertEqual(parser.generate_patch(0, 2),
                         '--- a/filename\n'
                         '+++ b/filename\n'
                         '@@ -1,2 +0,0 @@\n'
                         '-first\n'
                         '-second\n')
Beispiel #6
0
    def test_diff_at_start(self):
        fixture_path = helper.fixture('diff-start.txt')
        parser = DiffParser('foo bar/a', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(hunks[0].lines[0], '@@ -1 +1,4 @@')
        self.assertEqual(hunks[-1].lines[-1], '+c')
        self.assertEqual(hunks[0].old_start, 1)
        self.assertEqual(hunks[0].old_count, 1)
        self.assertEqual(hunks[0].new_start, 1)
        self.assertEqual(hunks[0].new_count, 4)
        self.assertEqual(
            parser.generate_patch(1, 3), '--- a/foo bar/a\n'
            '+++ b/foo bar/a\n'
            '@@ -1 +1,3 @@\n'
            ' bar\n'
            '+a\n'
            '+b\n')
        self.assertEqual(
            parser.generate_patch(0, 4), '--- a/foo bar/a\n'
            '+++ b/foo bar/a\n'
            '@@ -1 +1,4 @@\n'
            ' bar\n'
            '+a\n'
            '+b\n'
            '+c\n')
Beispiel #7
0
    def do(self):
        parser = DiffParser(self.model.filename, self.model.diff_text)
        if self.has_selection:
            patch = parser.generate_patch(self.first_line_idx,
                                          self.last_line_idx,
                                          reverse=self.reverse)
        else:
            patch = parser.generate_hunk_patch(self.first_line_idx,
                                               reverse=self.reverse)
        if patch is None:
            return

        cfg = gitcfg.current()
        tmp_path = utils.tmp_filename('patch')
        try:
            core.write(tmp_path, patch,
                       encoding=cfg.file_encoding(self.model.filename))
            if self.apply_to_worktree:
                status, out, err = self.model.apply_diff_to_worktree(tmp_path)
            else:
                status, out, err = self.model.apply_diff(tmp_path)
        finally:
            os.unlink(tmp_path)
        Interaction.log_status(status, out, err)
        self.model.update_file_status(update_index=True)
Beispiel #8
0
    def do(self):
        parser = DiffParser(self.model.filename, self.model.diff_text)
        if self.has_selection:
            patch = parser.generate_patch(self.first_line_idx,
                                          self.last_line_idx,
                                          reverse=self.reverse)
        else:
            patch = parser.generate_hunk_patch(self.first_line_idx,
                                               reverse=self.reverse)
        if patch is None:
            return

        cfg = gitcfg.current()
        tmp_path = utils.tmp_filename('patch')
        try:
            core.write(tmp_path, patch,
                       encoding=cfg.file_encoding(self.model.filename))
            if self.apply_to_worktree:
                status, out, err = self.model.apply_diff_to_worktree(tmp_path)
            else:
                status, out, err = self.model.apply_diff(tmp_path)
        finally:
            os.unlink(tmp_path)
        Interaction.log_status(status, out, err)
        self.model.update_file_status(update_index=True)
Beispiel #9
0
 def do(self):
     # The normal worktree vs index scenario
     parser = DiffParser(self.model,
                         filename=self.model.filename,
                         cached=self.staged,
                         reverse=self.apply_to_worktree)
     status, out, err = \
     parser.process_diff_selection(self.offset,
                                   self.selection_text,
                                   apply_to_worktree=self.apply_to_worktree)
     Interaction.log_status(status, out, err)
     self.model.update_file_status(update_index=True)
Beispiel #10
0
 def do(self):
     # The normal worktree vs index scenario
     parser = DiffParser(self.model,
                         filename=self.model.filename,
                         cached=self.staged,
                         reverse=self.apply_to_worktree)
     status, out, err = \
     parser.process_diff_selection(self.offset,
                                   self.selection_text,
                                   apply_to_worktree=self.apply_to_worktree)
     Interaction.log_status(status, out, err)
     self.model.update_file_status(update_index=True)
    def test_diff_at_end(self):
        fwd = helper.fixture('diff-end.txt')
        reverse = helper.fixture('diff-end-reverse.txt')

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.diffs()[0][0], '@@ -1,39 +1 @@')
        self.assertEqual(parser.offsets(), [1114])
        self.assertEqual(parser.spans(), [[0, 1114]])
    def test_diff_at_start(self):
        fwd = helper.fixture('diff-start.txt')
        reverse = helper.fixture('diff-start-reverse.txt')

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.diffs()[0][0], '@@ -1 +1,4 @@')
        self.assertEqual(parser.offsets(), [30])
        self.assertEqual(parser.spans(), [[0, 30]])
        self.assertEqual(parser.diffs_for_range(0, 10),
                         ([u'@@ -1 +1,4 @@\n bar\n+a\n+b\n+c\n\n'],
                          [0]))
Beispiel #13
0
 def do(self):
     # The normal worktree vs index scenario
     parser = DiffParser(
         self.model, filename=self.model.filename, cached=self.staged, reverse=self.apply_to_worktree
     )
     status, output = parser.process_diff_selection(
         self.selected, self.offset, self.selection, apply_to_worktree=self.apply_to_worktree
     )
     _notifier.broadcast(signals.log_cmd, status, output)
     # Redo the diff to show changes
     if self.staged:
         diffcmd = DiffStaged([self.model.filename])
     else:
         diffcmd = Diff([self.model.filename])
     diffcmd.do()
     self.model.update_file_status()
Beispiel #14
0
    def test_diff(self):
        fwd = helper.fixture('diff.txt')
        reverse = helper.fixture('diff-reverse.txt')
        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.offsets(),
                [916, 1798, 2550])
        self.assertEqual(parser.spans(),
                [[0, 916], [916, 1798], [1798, 2550]])

        diffs = parser.diffs()
        self.assertEqual(len(diffs), 3)

        self.assertEqual(len(diffs[0]), 23)
        self.assertEqual(diffs[0][0],
                '@@ -6,10 +6,21 @@ from cola import gitcmds')
        self.assertEqual(diffs[0][1],
                ' from cola import gitcfg')
        self.assertEqual(diffs[0][2],
                ' ')
        self.assertEqual(diffs[0][3],
                ' ')
        self.assertEqual(diffs[0][4],
                '+class DiffSource(object):')

        self.assertEqual(len(diffs[1]), 18)
        self.assertEqual(diffs[1][0],
                '@@ -29,13 +40,11 @@ class DiffParser(object):')
        self.assertEqual(diffs[1][1],
                '         self.diff_sel = []')
        self.assertEqual(diffs[1][2],
                '         self.selected = []')
        self.assertEqual(diffs[1][3],
                '         self.filename = filename')
        self.assertEqual(diffs[1][4],
                '+        self.diff_source = diff_source or DiffSource()')

        self.assertEqual(len(diffs[2]), 18)
        self.assertEqual(diffs[2][0],
                '@@ -43,11 +52,10 @@ class DiffParser(object):')
Beispiel #15
0
 def do(self):
     # The normal worktree vs index scenario
     parser = DiffParser(self.model,
                         filename=self.model.filename,
                         cached=self.staged,
                         reverse=self.apply_to_worktree)
     status, output = \
     parser.process_diff_selection(self.selected,
                                   self.offset,
                                   self.selection,
                                   apply_to_worktree=self.apply_to_worktree)
     _notifier.broadcast(signals.log_cmd, status, output)
     # Redo the diff to show changes
     if self.staged:
         diffcmd = DiffStaged([self.model.filename])
     else:
         diffcmd = Diff([self.model.filename])
     diffcmd.do()
     self.model.update_file_status()
Beispiel #16
0
    def test_diff_at_end(self):
        fixture_path = helper.fixture('diff-end.txt')
        parser = DiffParser('rijndael.js', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(hunks[0].lines[0], '@@ -1,39 +1 @@')
        self.assertEqual(
            hunks[-1].lines[-1],
            "+module.exports = require('./build/Release/rijndael');")
        self.assertEqual(hunks[0].old_start, 1)
        self.assertEqual(hunks[0].old_count, 39)
        self.assertEqual(hunks[0].new_start, 1)
        self.assertEqual(hunks[0].new_count, 1)
    def test_diff_at_start(self):
        fwd = helper.fixture("diff-start.txt")
        reverse = helper.fixture("diff-start-reverse.txt")

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename="", cached=False, reverse=False, diff_source=source)

        self.assertEqual(parser.diffs()[0][0], "@@ -1 +1,4 @@")
        self.assertEqual(parser.offsets(), [30])
        self.assertEqual(parser.spans(), [[0, 30]])
        self.assertEqual(parser.diffs_for_range(0, 10), ([u"@@ -1 +1,4 @@\n bar\n+a\n+b\n+c\n\n"], [0]))
        self.assertEqual(parser.ranges()[0].begin, [1, 1])
        self.assertEqual(parser.ranges()[0].end, [1, 4])
        self.assertEqual(parser.ranges()[0].make(), "@@ -1 +1,4 @@")
Beispiel #18
0
    def test_diff_at_start(self):
        fwd = helper.fixture('diff-start.txt')
        reverse = helper.fixture('diff-start-reverse.txt')

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.diffs()[0][0], '@@ -1 +1,4 @@')
        self.assertEqual(parser.offsets(), [30])
        self.assertEqual(parser.spans(), [[0, 30]])
        self.assertEqual(parser.diffs_for_range(0, 10),
                         (['@@ -1 +1,4 @@\n bar\n+a\n+b\n+c\n\n'],
                          [0]))
        self.assertEqual(parser.ranges()[0].begin, [1, 1])
        self.assertEqual(parser.ranges()[0].end, [1, 4])
        self.assertEqual(parser.ranges()[0].make(), '@@ -1 +1,4 @@')
Beispiel #19
0
    def test_diff(self):
        fixture_path = helper.fixture('diff.txt')
        parser = DiffParser('cola/diffparse.py', core.read(fixture_path))
        hunks = parser.hunks

        self.assertEqual(len(hunks), 3)

        self.assertEqual(hunks[0].first_line_idx, 0)
        self.assertEqual(len(hunks[0].lines), 23)
        self.assertEqual(hunks[0].lines[0],
                '@@ -6,10 +6,21 @@ from cola import gitcmds')
        self.assertEqual(hunks[0].lines[1],
                ' from cola import gitcfg')
        self.assertEqual(hunks[0].lines[2],
                ' ')
        self.assertEqual(hunks[0].lines[3],
                ' ')
        self.assertEqual(hunks[0].lines[4],
                '+class DiffSource(object):')
        self.assertEqual(hunks[0].lines[-1],
                "         self._header_start_re = re.compile('^@@ -(\d+)"
                " \+(\d+),(\d+) @@.*')")

        self.assertEqual(hunks[1].first_line_idx, 23)
        self.assertEqual(len(hunks[1].lines), 18)
        self.assertEqual(hunks[1].lines[0],
                '@@ -29,13 +40,11 @@ class DiffParser(object):')
        self.assertEqual(hunks[1].lines[1],
                '         self.diff_sel = []')
        self.assertEqual(hunks[1].lines[2],
                '         self.selected = []')
        self.assertEqual(hunks[1].lines[3],
                '         self.filename = filename')
        self.assertEqual(hunks[1].lines[4],
                '+        self.diff_source = diff_source or DiffSource()')
        self.assertEqual(hunks[1].lines[-1],
                '         self.header = header')

        self.assertEqual(hunks[2].first_line_idx, 41)
        self.assertEqual(len(hunks[2].lines), 16)
        self.assertEqual(hunks[2].lines[0],
                '@@ -43,11 +52,10 @@ class DiffParser(object):')
        self.assertEqual(hunks[2].lines[-1],
                '         """Writes a new diff corresponding to the user\'s'
                ' selection."""')
    def test_diff_that_empties_file(self):
        fwd = helper.fixture("diff-empty.txt")
        reverse = helper.fixture("diff-empty-reverse.txt")

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename="", cached=False, reverse=False, diff_source=source)

        self.assertEqual(parser.diffs()[0][0], "@@ -1,2 +0,0 @@")
        self.assertEqual(parser.offsets(), [33])
        self.assertEqual(parser.spans(), [[0, 33]])
        self.assertEqual(parser.diffs_for_range(0, 1), ([u"@@ -1,2 +0,0 @@\n-first\n-second\n\n"], [0]))

        self.assertEqual(parser.ranges()[0].begin, [1, 2])
        self.assertEqual(parser.ranges()[0].end, [0, 0])
        self.assertEqual(parser.ranges()[0].make(), "@@ -1,2 +0,0 @@")
Beispiel #21
0
    def test_diff_at_end(self):
        fwd = helper.fixture('diff-end.txt')
        reverse = helper.fixture('diff-end-reverse.txt')

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.diffs()[0][0], '@@ -1,39 +1 @@')
        self.assertEqual(parser.offsets(), [1114])
        self.assertEqual(parser.spans(), [[0, 1114]])
        self.assertEqual(parser.ranges()[0].begin, [1, 39])
        self.assertEqual(parser.ranges()[0].end, [1, 1])
        self.assertEqual(parser.ranges()[0].make(), '@@ -1,39 +1 @@')
Beispiel #22
0
    def test_diff_that_empties_file(self):
        fwd = helper.fixture('diff-empty.txt')
        reverse = helper.fixture('diff-empty-reverse.txt')

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename='',
                            cached=False, reverse=False,
                            diff_source=source)

        self.assertEqual(parser.diffs()[0][0], '@@ -1,2 +0,0 @@')
        self.assertEqual(parser.offsets(), [33])
        self.assertEqual(parser.spans(), [[0, 33]])
        self.assertEqual(parser.diffs_for_range(0, 1),
                         (['@@ -1,2 +0,0 @@\n-first\n-second\n\n'],
                          [0]))

        self.assertEqual(parser.ranges()[0].begin, [1, 2])
        self.assertEqual(parser.ranges()[0].end, [0, 0])
        self.assertEqual(parser.ranges()[0].make(), '@@ -1,2 +0,0 @@')
    def test_diff_at_end(self):
        fwd = helper.fixture("diff-end.txt")
        reverse = helper.fixture("diff-end-reverse.txt")

        source = DiffSource(fwd, reverse)
        model = DiffParseModel()
        parser = DiffParser(model, filename="", cached=False, reverse=False, diff_source=source)

        self.assertEqual(parser.diffs()[0][0], "@@ -1,39 +1 @@")
        self.assertEqual(parser.offsets(), [1114])
        self.assertEqual(parser.spans(), [[0, 1114]])
        self.assertEqual(parser.ranges()[0].begin, [1, 39])
        self.assertEqual(parser.ranges()[0].end, [1, 1])
        self.assertEqual(parser.ranges()[0].make(), "@@ -1,39 +1 @@")