summaryrefslogtreecommitdiff
path: root/git/diff.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2016-07-23 16:38:59 +0200
committerSebastian Thiel <byronimo@gmail.com>2016-07-23 16:45:40 +0200
commit4006c4347788a078051dffd6b197bb0f19d50b86 (patch)
treef3891d8874ac9e20f0800c4d5f995579d2a8ccb4 /git/diff.py
parent1ec4389bc3d1653af301e93fe0a6b25a31da9f3d (diff)
downloadgitpython-4006c4347788a078051dffd6b197bb0f19d50b86.tar.gz
fix(diff): use explicit change-type if possible
That way, we do not have to figure the change type out by examining the diff object. It's implemented in a way that should yield more desireable results as we keep the change-type that git is providing us with. Fixes #493
Diffstat (limited to 'git/diff.py')
-rw-r--r--git/diff.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/git/diff.py b/git/diff.py
index 06193920..fb8faaf6 100644
--- a/git/diff.py
+++ b/git/diff.py
@@ -183,7 +183,9 @@ class DiffIndex(list):
raise ValueError("Invalid change type: %s" % change_type)
for diff in self:
- if change_type == "A" and diff.new_file:
+ if diff.change_type == change_type:
+ yield diff
+ elif change_type == "A" and diff.new_file:
yield diff
elif change_type == "D" and diff.deleted_file:
yield diff
@@ -247,11 +249,12 @@ class Diff(object):
NULL_BIN_SHA = b"\0" * 20
__slots__ = ("a_blob", "b_blob", "a_mode", "b_mode", "a_rawpath", "b_rawpath",
- "new_file", "deleted_file", "raw_rename_from", "raw_rename_to", "diff")
+ "new_file", "deleted_file", "raw_rename_from", "raw_rename_to",
+ "diff", "change_type")
def __init__(self, repo, a_rawpath, b_rawpath, a_blob_id, b_blob_id, a_mode,
b_mode, new_file, deleted_file, raw_rename_from,
- raw_rename_to, diff):
+ raw_rename_to, diff, change_type):
self.a_mode = a_mode
self.b_mode = b_mode
@@ -286,6 +289,7 @@ class Diff(object):
self.raw_rename_to = raw_rename_to or None
self.diff = diff
+ self.change_type = change_type
def __eq__(self, other):
for name in self.__slots__:
@@ -435,7 +439,7 @@ class Diff(object):
new_file, deleted_file,
rename_from,
rename_to,
- None))
+ None, None))
previous_header = header
# end for each header we parse
@@ -483,7 +487,7 @@ class Diff(object):
# END add/remove handling
diff = Diff(repo, a_path, b_path, a_blob_id, b_blob_id, old_mode, new_mode,
- new_file, deleted_file, rename_from, rename_to, '')
+ new_file, deleted_file, rename_from, rename_to, '', change_type)
index.append(diff)
# END for each line