diff rhodecode/lib/diffs.py @ 2391:91fae60bf2b6 codereview

merge with beta
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 05 Jun 2012 21:22:23 +0200
parents 9d61aad859bc a455b2c79c85
children 60dfc369df1d
line wrap: on
line diff
--- a/rhodecode/lib/diffs.py	Wed May 30 23:12:24 2012 +0200
+++ b/rhodecode/lib/diffs.py	Tue Jun 05 21:22:23 2012 +0200
@@ -135,7 +135,7 @@
     """
     _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
 
-    def __init__(self, diff, differ='diff', format='udiff'):
+    def __init__(self, diff, differ='diff', format='gitdiff'):
         """
         :param diff:   a text in diff format or generator
         :param format: format of diff passed, `udiff` or `gitdiff`
@@ -289,7 +289,7 @@
             do(line)
             do(next_)
 
-    def _parse_udiff(self):
+    def _parse_udiff(self, inline_diff=True):
         """
         Parse the diff an return data for the template.
         """
@@ -386,9 +386,14 @@
                             })
 
                         line = lineiter.next()
+
         except StopIteration:
             pass
 
+        sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation'])
+        if inline_diff is False:
+            return sorted(files, key=sorter)
+
         # highlight inline changes
         for diff_data in files:
             for chunk in diff_data['chunks']:
@@ -404,14 +409,15 @@
                             self.differ(line, nextline)
                 except StopIteration:
                     pass
-        return files
 
-    def prepare(self):
+        return sorted(files, key=sorter)
+
+    def prepare(self, inline_diff=True):
         """
         Prepare the passed udiff for HTML rendering. It'l return a list
         of dicts
         """
-        return self._parse_udiff()
+        return self._parse_udiff(inline_diff=inline_diff)
 
     def _safe_id(self, idstring):
         """Make a string safe for including in an id attribute.