diff options
-rw-r--r-- | gbp/git/repository.py | 15 | ||||
-rw-r--r-- | tests/test_GitRepository.py | 2 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gbp/git/repository.py b/gbp/git/repository.py index 9f70dd1..c9f3610 100644 --- a/gbp/git/repository.py +++ b/gbp/git/repository.py @@ -19,6 +19,7 @@ import re import subprocess import os.path +from collections import defaultdict import gbp.log as log from gbp.command_wrappers import (GitCommand, CommandExecFailed) @@ -1210,7 +1211,7 @@ class GitRepository(object): @rtype: dict """ args = GitArgs('--pretty=format:%an%x00%ae%x00%ad%x00%cn%x00%ce%x00%cd%x00%s%x00%b%x00', - '-z', '--quiet', '--date=raw', commit) + '-z', '--date=raw', '--name-status', commit) out, err, ret = self._git_inout('show', args.args) if ret: raise GitRepositoryError("Unable to retrieve commit info for %s" @@ -1225,11 +1226,21 @@ class GitRepository(object): fields[4].strip(), fields[5].strip()) + files = defaultdict(list) + file_fields = fields[8:] + # For some reason git returns one extra empty field for merge commits + if file_fields[0] == '': file_fields.pop(0) + while len(file_fields) and file_fields[0] != '': + status = file_fields.pop(0).strip() + path = file_fields.pop(0) + files[status].append(path) + return {'id' : commit, 'author' : author, 'committer' : committer, 'subject' : fields[6], - 'body' : fields[7]} + 'body' : fields[7], + 'files' : files} #{ Patches def format_patches(self, start, end, output_dir, signature=True, thread=None): diff --git a/tests/test_GitRepository.py b/tests/test_GitRepository.py index 5a590ff..10b448b 100644 --- a/tests/test_GitRepository.py +++ b/tests/test_GitRepository.py @@ -369,6 +369,8 @@ def test_get_commit_info(): True >>> (now - datetime.fromtimestamp(int(info['committer'].date.split()[0]))).seconds < 10 True + >>> info['files'] + defaultdict(<type 'list'>, {'M': ['testfile']}) """ def test_mirror_clone(): |