summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gbp/git/repository.py15
-rw-r--r--tests/test_GitRepository.py2
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():