def testValidHunkHeader(self): """Parse a valid hunk header""" header = "@@ -34,11 +50,6 @@\n" hunk = hunk_from_header(header); self.assertEqual(hunk.orig_pos, 34) self.assertEqual(hunk.orig_range, 11) self.assertEqual(hunk.mod_pos, 50) self.assertEqual(hunk.mod_range, 6) self.assertEqual(str(hunk), header)
def testValidHunkHeader2(self): """Parse a tricky, valid hunk header""" header = "@@ -1 +0,0 @@\n" hunk = hunk_from_header(header); self.assertEqual(hunk.orig_pos, 1) self.assertEqual(hunk.orig_range, 1) self.assertEqual(hunk.mod_pos, 0) self.assertEqual(hunk.mod_range, 0) self.assertEqual(str(hunk), header)
def testValidHunkHeader2(self): """Parse a tricky, valid hunk header""" header = "@@ -1 +0,0 @@\n" hunk = hunk_from_header(header) self.assertEqual(hunk.orig_pos, 1) self.assertEqual(hunk.orig_range, 1) self.assertEqual(hunk.mod_pos, 0) self.assertEqual(hunk.mod_range, 0) self.assertEqual(str(hunk), header)
def testValidHunkHeader(self): """Parse a valid hunk header""" header = "@@ -34,11 +50,6 @@\n" hunk = hunk_from_header(header) self.assertEqual(hunk.orig_pos, 34) self.assertEqual(hunk.orig_range, 11) self.assertEqual(hunk.mod_pos, 50) self.assertEqual(hunk.mod_range, 6) self.assertEqual(str(hunk), header)
def parse_line(self, line): if line.startswith("@"): return hunk_from_header(line) elif line.startswith("+"): return InsertLine(line[1:]) elif line.startswith("-"): return RemoveLine(line[1:]) elif line.startswith(" "): return ContextLine(line[1:]) else: return line
def parse_diff(text): """Parse a string into categorised diff lines. Yields a sequence of (CSS class, line number in diff, line number in original file, line number in modified file, line). """ max_format_lines = config.diff.max_format_lines header_next = False orig_row = 0 mod_row = 0 for row, line in enumerate(text.splitlines()[:max_format_lines]): row += 1 if (line.startswith('===') or line.startswith('diff') or line.startswith('index')): yield 'diff-file text', row, None, None, line header_next = True elif (header_next and (line.startswith('+++') or line.startswith('---'))): yield 'diff-header text', row, None, None, line elif line.startswith('@@'): try: hunk = hunk_from_header(line + '\n') # The positions indicate the per-file line numbers of # the next row. orig_row = hunk.orig_pos mod_row = hunk.mod_pos except Exception: getUtility(IErrorReportingUtility).raising(sys.exc_info()) orig_row = 1 mod_row = 1 yield 'diff-chunk text', row, None, None, line header_next = False elif line.startswith('+'): yield 'diff-added text', row, None, mod_row, line mod_row += 1 elif line.startswith('-'): yield 'diff-removed text', row, orig_row, None, line orig_row += 1 elif line.startswith('#'): # This doesn't occur in normal unified diffs, but does # appear in merge directives, which use text/x-diff or # text/x-patch. yield 'diff-comment text', row, None, None, line header_next = False else: yield 'text', row, orig_row, mod_row, line orig_row += 1 mod_row += 1 header_next = False
def testPDiff(self): """Parse a hunk header produced by diff -p""" header = "@@ -407,7 +292,7 @@ bzr 0.18rc1 2007-07-10\n" hunk = hunk_from_header(header) self.assertEqual('bzr 0.18rc1 2007-07-10', hunk.tail) self.assertEqual(header, str(hunk))