changeset 3820:8df1bc51aa9c beta

diff parser: prefer git headers over old unified diff headers Makes the diff show both rename and chmod info and the diff.
author Mads Kiilerich <madski@unity3d.com>
date Wed, 10 Apr 2013 03:00:20 +0200
parents 46d5811262b6
children ce4b7023a492
files rhodecode/lib/diffs.py
diffstat 1 files changed, 28 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/diffs.py	Wed Apr 10 02:58:36 2013 +0200
+++ b/rhodecode/lib/diffs.py	Wed Apr 10 03:00:20 2013 +0200
@@ -360,41 +360,38 @@
             stats = None
             msgs = []
 
-            if not head['a_file'] and head['b_file']:
-                op = 'A'
-                stats = ['b', NEW_FILENODE]
-                msgs.append('new file')
-            elif head['a_file'] and head['b_file']:
-                op = 'M'
-                stats = ['b', MOD_FILENODE]
-            elif head['a_file'] and not head['b_file']:
+            if head['deleted_file_mode']:
                 op = 'D'
                 stats = ['b', DEL_FILENODE]
                 msgs.append('deleted file')
+            elif head['new_file_mode']:
+                op = 'A'
+                stats = ['b', NEW_FILENODE]
+                msgs.append('new file %s' % head['new_file_mode'])
             else:
-                if head['deleted_file_mode']:
-                    op = 'D'
-                    stats = ['b', DEL_FILENODE]
-                    msgs.append('deleted file')
-                elif head['new_file_mode']:
-                    op = 'A'
-                    stats = ['b', NEW_FILENODE]
-                    msgs.append('new file %s' % head['new_file_mode'])
-                else:
-                    if head['new_mode'] and head['old_mode']:
-                        op = 'M'
-                        stats = ['b', CHMOD_FILENODE]
-                        msgs.append('modified file chmod %s => %s'
-                                      % (head['old_mode'], head['new_mode']))
-                    if (head['rename_from'] and head['rename_to']
-                          and head['rename_from'] != head['rename_to']):
-                        op = 'M'
-                        stats = ['b', RENAMED_FILENODE] # might overwrite CHMOD_FILENODE
-                        msgs.append('file renamed from %s to %s'
-                                      % (head['rename_from'], head['rename_to']))
-                    if op is None:
-                        op = 'M'
-                        stats = ['b', MOD_FILENODE]
+                if head['new_mode'] and head['old_mode']:
+                    op = 'M'
+                    stats = ['b', CHMOD_FILENODE]
+                    msgs.append('modified file chmod %s => %s'
+                                  % (head['old_mode'], head['new_mode']))
+                if (head['rename_from'] and head['rename_to']
+                      and head['rename_from'] != head['rename_to']):
+                    op = 'M'
+                    stats = ['b', RENAMED_FILENODE] # might overwrite CHMOD_FILENODE
+                    msgs.append('file renamed from %s to %s'
+                                  % (head['rename_from'], head['rename_to']))
+                if op is None: # fall back: detect missed old style add or remove
+                    if not head['a_file'] and head['b_file']:
+                        op = 'A'
+                        stats = ['b', NEW_FILENODE]
+                        msgs.append('new file')
+                    elif head['a_file'] and not head['b_file']:
+                        op = 'D'
+                        stats = ['b', DEL_FILENODE]
+                        msgs.append('deleted file')
+                if op is None:
+                    op = 'M'
+                    stats = ['b', MOD_FILENODE]
 
             if head['a_file'] or head['b_file']: # a real diff
                 try: