diff --git a/klaus/diff.py b/klaus/diff.py index fefdb1ce84db5313134a04cc80c9c69644c8ceae..7788f8f4dcb1527fea3000049b5071d6cfc1ce06 100644 --- a/klaus/diff.py +++ b/klaus/diff.py @@ -27,18 +27,16 @@ class DiffRenderer(object): """:param udiff: a text in udiff format""" self.lines = [escape(line) for line in udiff.splitlines()] - def _extract_rev(self, line1, line2): - def _extract(line): - parts = line.split(None, 1) - if parts[0].startswith(('a/', 'b/')): - parts[0] = parts[0][2:] - return parts[0], (len(parts) == 2 and parts[1] or None) - try: - if line1.startswith('--- ') and line2.startswith('+++ '): - return _extract(line1[4:]), _extract(line2[4:]) - except (ValueError, IndexError): - pass - return (None, None), (None, None) + def _extract_filename(self, line): + """ + Extract file name from unified diff line: + --- a/foo/bar ==> foo/bar + +++ b/foo/bar ==> foo/bar + """ + if line.startswith(("--- /dev/null", "+++ /dev/null")): + return line[len("--- "):] + else: + return line[len("--- a/"):] def _highlight_line(self, line, next): """Highlight inline changes in both lines.""" @@ -91,14 +89,11 @@ class DiffRenderer(object): in_header = False chunks = [] - old, new = self._extract_rev(line, lineiter.next()) adds, dels = 0, 0 files.append({ 'is_header': False, - 'old_filename': old[0], - 'old_revision': old[1], - 'new_filename': new[0], - 'new_revision': new[1], + 'old_filename': self._extract_filename(line), + 'new_filename': self._extract_filename(lineiter.next()), 'additions': adds, 'deletions': dels, 'chunks': chunks