From 811ea9872a5895e64ae45e85e350c54b144f54d9 Mon Sep 17 00:00:00 2001 From: Alexander Pepper Date: Wed, 10 Aug 2011 12:02:57 +0200 Subject: [PATCH 1/3] Catch MalformedHunkHeader if "allow_dirty". This can be, when the output of diff is a merge. --- pycvsanaly2/PatchParser.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pycvsanaly2/PatchParser.py b/pycvsanaly2/PatchParser.py index c4d0ee4..2fed777 100644 --- a/pycvsanaly2/PatchParser.py +++ b/pycvsanaly2/PatchParser.py @@ -15,6 +15,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import re +from pycvsanaly2.utils import printerr binary_files_re = 'Binary files (.*) and (.*) differ\n' @@ -410,7 +411,13 @@ def iter_file_patch(iter_lines, allow_dirty=False): yield saved_lines saved_lines = [] elif line.startswith('@@'): - hunk = hunk_from_header(line) + try: + hunk = hunk_from_header(line) + except MalformedHunkHeader, e: + if allow_dirty: + printerr("Error: MalformedHunkHeader; Probably merge commit. Skipping.") + continue + raise e orig_range = hunk.orig_range saved_lines.append(line) if len(saved_lines) > 0: From f7467378e3cb9fce88a27deea428d28f9b8144b6 Mon Sep 17 00:00:00 2001 From: Alexander Pepper Date: Thu, 11 Aug 2011 15:44:25 +0200 Subject: [PATCH 2/3] [Git] Better parsing for Merge-Commits. This works only for two-way merges! Three-way or more merges are ignored. --- pycvsanaly2/GitParser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pycvsanaly2/GitParser.py b/pycvsanaly2/GitParser.py index 3a57cf7..80712f1 100644 --- a/pycvsanaly2/GitParser.py +++ b/pycvsanaly2/GitParser.py @@ -93,8 +93,8 @@ def set_tail(self, tail): " \d{4}) ([+-]\d{4})$") patterns['author-date'] = re.compile("^AuthorDate: (.* \d+ \d+:\d+:\d+" + \ " \d{4}) ([+-]\d{4})$") - patterns['file'] = re.compile("^([MAD])[ \t]+(.*)$") - patterns['file-moved'] = re.compile("^([RC])[0-9]+[ \t]+(.*)[ \t]+(.*)$") + patterns['file'] = re.compile("^[ACDMRTUXB]{0,1}([MAD])[ \t]+(.*)$") + patterns['file-moved'] = re.compile("^[ACDMRTUXB]{0,1}([RC])[0-9]+[ \t]+(.*)[ \t]+(.*)$") patterns['branch'] = re.compile("refs/remotes/([^,]*)/([^,]*)") patterns['local-branch'] = re.compile("refs/heads/([^,]*)") patterns['tag'] = re.compile("tag: refs/tags/([^,]*)") From 193e7d53e24a17892ca8d20ade03aba454d85a03 Mon Sep 17 00:00:00 2001 From: Alexander Pepper Date: Thu, 11 Aug 2011 18:02:56 +0200 Subject: [PATCH 3/3] [Git] File Change "T" - Type Change added as a modification. This is so, if a file is changed to a symlink --- pycvsanaly2/DBContentHandler.py | 2 +- pycvsanaly2/GitParser.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pycvsanaly2/DBContentHandler.py b/pycvsanaly2/DBContentHandler.py index 8071b60..5601ef9 100644 --- a/pycvsanaly2/DBContentHandler.py +++ b/pycvsanaly2/DBContentHandler.py @@ -663,7 +663,7 @@ def commit(self, commit): if action.type == 'A': # A file has been added file_id = self.__action_add(path, prefix, log) - elif action.type == 'M': + elif action.type == 'M' or action.type == 'T': # A file has been modified file_id = self.__get_file_for_path(path, log.id)[0] elif action.type == 'D': diff --git a/pycvsanaly2/GitParser.py b/pycvsanaly2/GitParser.py index 80712f1..ba46c2f 100644 --- a/pycvsanaly2/GitParser.py +++ b/pycvsanaly2/GitParser.py @@ -93,7 +93,7 @@ def set_tail(self, tail): " \d{4}) ([+-]\d{4})$") patterns['author-date'] = re.compile("^AuthorDate: (.* \d+ \d+:\d+:\d+" + \ " \d{4}) ([+-]\d{4})$") - patterns['file'] = re.compile("^[ACDMRTUXB]{0,1}([MAD])[ \t]+(.*)$") + patterns['file'] = re.compile("^[ACDMRTUXB]{0,1}([MADT])[ \t]+(.*)$") patterns['file-moved'] = re.compile("^[ACDMRTUXB]{0,1}([RC])[0-9]+[ \t]+(.*)[ \t]+(.*)$") patterns['branch'] = re.compile("refs/remotes/([^,]*)/([^,]*)") patterns['local-branch'] = re.compile("refs/heads/([^,]*)")