separator = '----- GIT LOG SEPARATOR -----'
git_log = subprocess.Popen(['git', 'log', '-m', '--first-parent',
- '--name-only', '--no-color',
+ '--name-status', '--no-color',
'--format=%s%%n%%ct' % separator],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
universal_newlines=True)
-filenames = set()
+changed_files = set()
+deleted_files = set()
+
# stages: 1 - start of commit, 2 - timestamp, 3 - empty line, 4 - files
stage = 1
for line in git_log.stdout:
stage = 4
assert line == '', line
elif stage == 4:
- filename = line
- if filename not in filenames:
- filenames.add(filename)
+ if line.startswith('A') or line.startswith('M') \
+ or line.startswith('D'):
+ filename = line.split(None, 2)[1]
+ elif line.startswith('R'):
+ filename = line.split(None, 3)[2] # renamed to
+ if line.startswith('D'):
+ if filename not in changed_files: # The file was not readded
+ deleted_files.add(filename)
+ if filename not in deleted_files and filename not in changed_files:
+ changed_files.add(filename)
if os.path.exists(filename):
os.utime(filename, (time, time))
else: