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):")
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()
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')
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_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')
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)
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]))
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()
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):')
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()
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 @@")
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 @@')
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 @@")
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 @@')
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 @@")