[PATCH] clang-format-diff: Don't reformat unmodified lines

Alp Toker alp at nuanti.com
Wed Oct 2 02:14:51 PDT 2013


clang-format-diff incorrectly modifies unchanged lines due to an error
in diff parsing.

The unified diff format has a default line change count of 1, and 0 may
be specified to indicate that no lines have been added. This patch
updates the parser to accurately reflect the diff specification.

This also has the benefit of stabilising the operation so it will
produce the same output when run multiple times on the same changeset,
which was previously not the case.

No tests added because this script is not currently tested (though we
should look into that!)

-- 
http://www.nuanti.com
the browser experts

-------------- next part --------------
commit 07765e6e8d2d077f1d4d81b72cb9363fc3940341
Author: Alp Toker <alp at nuanti.com>
Date:   Wed Oct 2 09:59:49 2013 +0100

    clang-format-diff: Don't modify unchanged lines
    
    clang-format-diff incorrectly modifies unchanged lines due to an error in diff
    parsing.
    
    The unified diff format has a default line change count of 1, and 0 may be
    specified to indicate that no lines have been added. This patch updates the
    parser to accurately reflect the diff specification.
    
    This also has the benefit of stabilising the operation so it will produce the
    same output when run multiple times, which was previously not the case.

diff --git a/tools/clang-format/clang-format-diff.py b/tools/clang-format/clang-format-diff.py
index 7c14178..90723d2 100755
--- a/tools/clang-format/clang-format-diff.py
+++ b/tools/clang-format/clang-format-diff.py
@@ -60,9 +60,12 @@ def main():
     match = re.search('^@@.*\+(\d+)(,(\d+))?', line)
     if match:
       start_line = int(match.group(1))
-      end_line = start_line
+      line_count = 1
       if match.group(3):
-        end_line = start_line + int(match.group(3))
+        line_count = int(match.group(3))
+      if line_count == 0:
+        continue
+      end_line = start_line + line_count - 1;
       lines_by_file.setdefault(filename, []).extend(
           ['-lines', str(start_line) + ':' + str(end_line)])
 


More information about the cfe-commits mailing list