[PATCH v5 06/15] contrib: related: show role count
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- May 18, 2013, 11:46 UTC
- Message-ID
- <1368877615-9563-7-git-send-email-felipe.contreras@gmail.com>
- In-Reply-To
- <1368877615-9563-1-git-send-email-felipe.contreras@gmail.com>
Instead of showing the total involvement, show it per role: author, or signer.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> --- contrib/related/git-related | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/contrib/related/git-related b/contrib/related/git-related index df13148..cd1ef59 100755 --- a/contrib/related/git-related +++ b/contrib/related/git-related @@ -31,10 +31,12 @@ class Person @name = name @email = email @commits = {} + @roles = Hash.new(0) end - def add_role(commit) + def add_role(commit, role) @commits[commit] = true + @roles[role] += 1 end def <=>(b) @@ -79,20 +81,20 @@ class Commit end def parse(data) - msg = nil + msg = author = nil data.each_line do |line| if not msg case line when /^author ([^<>]+) <(\S+)> (.+)$/ author = Persons.get($1, $2) - author.add_role(@id) + author.add_role(@id, :author) when /^$/ msg = true end else if line =~ /^(Signed-off|Reviewed|Acked)-by: ([^<>]+) <(\S+?)>$/ person = Persons.get($2, $3) - person.add_role(@id) + person.add_role(@id, :signer) if person != author end end end @@ -174,5 +176,11 @@ persons = Persons.new persons.sort.reverse.each do |person| percent = person.size.to_f * 100 / commits.size next if percent < $min_percent - puts '%s (involved: %u%%)' % [person, percent] + + roles = person.roles.map do |role, role_count| + role_percent = role_count.to_f * 100 / commits.size + '%s: %u%%' % [role, role_percent] + end + + puts '%s (%s)' % [person, roles.join(', ')] end
-- 1.8.3.rc2.542.g24820ba