Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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
Example #6
0
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
Example #7
0
 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))
Example #8
0
 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))