mirror of
https://github.com/hoxu/gitstats.git
synced 2026-03-01 18:23:26 +01:00
Tags: show commits & authors for each tag.
A simple assumption is made about the tags: it's assumed that they come in chronological order, and share the same history (eg. v0.0.1, v0.0.2). That way, to get commits made for v0.0.2, we simply look for history from v0.0.1 to v0.0.2.
This commit is contained in:
@@ -3,15 +3,6 @@
|
||||
- git-log --pretty=format:"%at %an" |grep -C3 unknown
|
||||
- git-rev-list (for number of files in each revision) says "Warning: failed to parse line "<unknown> 17741"
|
||||
|
||||
- Tags
|
||||
- sort tags by date and collect info starting from latest
|
||||
- show how many commits per tag
|
||||
- git rev-list v0.0.1 |wc -l
|
||||
- git rev-list v0.0.2 |wc -l
|
||||
- git rev-list v0.0.2 ^v0.0.1 |wc -l
|
||||
- Authors (count of people contributing after last version)?
|
||||
- git shortlog -s v0.0.2 ^v0.0.1
|
||||
|
||||
[Unsorted]
|
||||
- clean up after running gnuplot (option to keep .dat files around?)
|
||||
- show raw data in some way (the tables used currently aren't very nice)
|
||||
|
||||
29
gitstats
29
gitstats
@@ -183,7 +183,26 @@ class GitDataCollector(DataCollector):
|
||||
stamp = int(parts[0])
|
||||
except ValueError:
|
||||
stamp = 0
|
||||
self.tags[tag] = { 'stamp': stamp, 'hash' : hash, 'date' : datetime.datetime.fromtimestamp(stamp).strftime('%Y-%m-%d') }
|
||||
self.tags[tag] = { 'stamp': stamp, 'hash' : hash, 'date' : datetime.datetime.fromtimestamp(stamp).strftime('%Y-%m-%d'), 'commits': 0, 'authors': {} }
|
||||
|
||||
# collect info on tags, starting from latest
|
||||
tags_sorted_by_date_desc = map(lambda el : el[1], reversed(sorted(map(lambda el : (el[1]['date'], el[0]), data.tags.items()))))
|
||||
prev = None
|
||||
for tag in reversed(tags_sorted_by_date_desc):
|
||||
#print prev, tag
|
||||
cmd = 'git shortlog -s "%s"' % tag
|
||||
if prev != None:
|
||||
cmd += ' "^%s"' % prev
|
||||
output = getpipeoutput([cmd])
|
||||
prev = tag
|
||||
for line in output.split('\n'):
|
||||
parts = re.split('\s+', line, 2)
|
||||
#print parts
|
||||
commits = int(parts[1])
|
||||
author = parts[2]
|
||||
self.tags[tag]['commits'] += commits
|
||||
self.tags[tag]['authors'][author] = commits
|
||||
#print self.tags
|
||||
|
||||
# Collect revision statistics
|
||||
# Outputs "<stamp> <author>"
|
||||
@@ -740,11 +759,15 @@ class HTMLReportCreator(ReportCreator):
|
||||
f.write('</dl>')
|
||||
|
||||
f.write('<table>')
|
||||
f.write('<tr><th>Name</th><th>Date</th></tr>')
|
||||
f.write('<tr><th>Name</th><th>Date</th><th>Commits</th><th>Authors</th></tr>')
|
||||
# sort the tags by date desc
|
||||
tags_sorted_by_date_desc = map(lambda el : el[1], reversed(sorted(map(lambda el : (el[1]['date'], el[0]), data.tags.items()))))
|
||||
for tag in tags_sorted_by_date_desc:
|
||||
f.write('<tr><td>%s</td><td>%s</td></tr>' % (tag, data.tags[tag]['date']))
|
||||
authorinfo = []
|
||||
authors_by_commits = getkeyssortedbyvalues(data.tags[tag]['authors'])
|
||||
for i in reversed(authors_by_commits):
|
||||
authorinfo.append('%s (%d)' % (i, data.tags[tag]['authors'][i]))
|
||||
f.write('<tr><td>%s</td><td>%s</td><td>%d</td><td>%s</td></tr>' % (tag, data.tags[tag]['date'], data.tags[tag]['commits'], ', '.join(authorinfo)))
|
||||
f.write('</table>')
|
||||
|
||||
f.write('</body></html>')
|
||||
|
||||
Reference in New Issue
Block a user