diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2009-10-21 10:03:56 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2009-10-21 10:03:56 +0200 |
commit | a7f52745c95e5dd673a79a2281ccd7463ce00ffa (patch) | |
tree | c13b8b0d213d2d91e237a1de86e73a8fa9bb95f2 /lib/git/diff.py | |
parent | 047b210d6b9ae0b65a2aee0fcfb6858c6dc01bf9 (diff) | |
download | gitpython-a7f52745c95e5dd673a79a2281ccd7463ce00ffa.tar.gz |
Added info about 0.1.7 release changes
reverted 19533ffadbcc959f12bf51488cf66f0715bec4c1 as it would introduce an API change
Diffstat (limited to 'lib/git/diff.py')
-rw-r--r-- | lib/git/diff.py | 55 |
1 files changed, 14 insertions, 41 deletions
diff --git a/lib/git/diff.py b/lib/git/diff.py index 44f55602..0216e061 100644 --- a/lib/git/diff.py +++ b/lib/git/diff.py @@ -5,44 +5,28 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php import re -import blob +import commit class Diff(object): """ A Diff contains diff information between two commits. - - It contains two sides a and b of the diff, members are prefixed with - "a" and "b" respectively to inidcate that. - - Diffs keep information about the changed blob objects, the file mode, renames, - deletions and new files. - - There are a few cases where None has to be expected as member variable value: - - ``New File``:: - - a_mode is None - a_blob is None - - ``Deleted File``:: - - b_mode is None - b_blob is NOne """ - def __init__(self, repo, a_path, b_path, a_blob, b_blob, a_mode, + def __init__(self, repo, a_path, b_path, a_commit, b_commit, a_mode, b_mode, new_file, deleted_file, rename_from, rename_to, diff): self.repo = repo + self.a_path = a_path + self.b_path = b_path - if not a_blob or re.search(r'^0{40}$', a_blob): - self.a_blob = None + if not a_commit or re.search(r'^0{40}$', a_commit): + self.a_commit = None else: - self.a_blob = blob.Blob(repo, id=a_blob, mode=a_mode, name=a_path) - if not b_blob or re.search(r'^0{40}$', b_blob): - self.b_blob = None + self.a_commit = commit.Commit(repo, id=a_commit) + if not b_commit or re.search(r'^0{40}$', b_commit): + self.b_commit = None else: - self.b_blob = blob.Blob(repo, id=b_blob, mode=b_mode, name=b_path) + self.b_commit = commit.Commit(repo, id=b_commit) self.a_mode = a_mode self.b_mode = b_mode @@ -55,17 +39,6 @@ class Diff(object): @classmethod def list_from_string(cls, repo, text): - """ - Create a new diff object from the given text - ``repo`` - is the repository we are operating on - it is required - - ``text`` - result of 'git diff' between two commits or one commit and the index - - Returns - git.Diff[] - """ diffs = [] diff_header = re.compile(r""" @@ -78,8 +51,8 @@ class Diff(object): ^new[ ]mode[ ](?P<new_mode>\d+)(?:\n|$))? (?:^new[ ]file[ ]mode[ ](?P<new_file_mode>.+)(?:\n|$))? (?:^deleted[ ]file[ ]mode[ ](?P<deleted_file_mode>.+)(?:\n|$))? - (?:^index[ ](?P<a_blob>[0-9A-Fa-f]+) - \.\.(?P<b_blob>[0-9A-Fa-f]+)[ ]?(?P<b_mode>.+)?(?:\n|$))? + (?:^index[ ](?P<a_commit>[0-9A-Fa-f]+) + \.\.(?P<b_commit>[0-9A-Fa-f]+)[ ]?(?P<b_mode>.+)?(?:\n|$))? """, re.VERBOSE | re.MULTILINE).match for diff in ('\n' + text).split('\ndiff --git')[1:]: @@ -87,10 +60,10 @@ class Diff(object): a_path, b_path, similarity_index, rename_from, rename_to, \ old_mode, new_mode, new_file_mode, deleted_file_mode, \ - a_blob, b_blob, b_mode = header.groups() + a_commit, b_commit, b_mode = header.groups() new_file, deleted_file = bool(new_file_mode), bool(deleted_file_mode) - diffs.append(Diff(repo, a_path, b_path, a_blob, b_blob, + diffs.append(Diff(repo, a_path, b_path, a_commit, b_commit, old_mode or deleted_file_mode, new_mode or new_file_mode or b_mode, new_file, deleted_file, rename_from, rename_to, diff[header.end():])) |