Instead of showing the total involvement, show it per role: author, or signer. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/related/git-related | 18 +++++++++++++----- contrib/related/test-related.t | 30 +++++++++++++++--------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/contrib/related/git-related b/contrib/related/git-related index 3cac925..04c56f5 100755 --- a/contrib/related/git-related +++ b/contrib/related/git-related @@ -16,10 +16,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) @@ -64,20 +66,20 @@ class Commit end def parse(data) - in_body = nil + in_body = author = nil data.each_line do |line| if not in_body case line when /^author ([^<>]+) <(\S+)> (.+)$/ author = Persons.get($1, $2) - author.add_role(@id) + author.add_role(@id, :author) when /^$/ in_body = true end else if line =~ /^(Signed-off-by|Reviewed-by|Acked-by|Cc): ([^<>]+) <(\S+?)>$/ person = Persons.get($2, $3) - person.add_role(@id) + person.add_role(@id, :signer) if person != author end end end @@ -204,5 +206,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 diff --git a/contrib/related/test-related.t b/contrib/related/test-related.t index ec2680a..90cc516 100755 --- a/contrib/related/test-related.t +++ b/contrib/related/test-related.t @@ -34,8 +34,8 @@ test_expect_success "basic" " git format-patch --stdout -1 basic > patch && git related patch | sort > actual && cat > expected <<-EOF && - Jon Stewart <jon@xxxxxxxxxxx> (involved: 50%) - Pablo Escobar <pablo@xxxxxxxxxxx> (involved: 50%) + Jon Stewart <jon@xxxxxxxxxxx> (author: 50%) + Pablo Escobar <pablo@xxxxxxxxxxx> (author: 50%) EOF test_cmp expected actual " @@ -44,9 +44,9 @@ test_expect_success "others" " git format-patch --stdout -1 master > patch && git related patch | sort > actual && cat > expected <<-EOF && - John Doe <john@xxxxxxx> (involved: 33%) - John Poppins <john@xxxxxxx> (involved: 33%) - Jon Stewart <jon@xxxxxxxxxxx> (involved: 66%) + John Doe <john@xxxxxxx> (author: 33%) + John Poppins <john@xxxxxxx> (author: 33%) + Jon Stewart <jon@xxxxxxxxxxx> (signer: 33%, author: 33%) EOF test_cmp expected actual " @@ -56,10 +56,10 @@ test_expect_success "multiple patches" " git format-patch --stdout -1 master^ > patch2 && git related patch1 patch2 | sort > actual && cat > expected <<-EOF && - John Doe <john@xxxxxxx> (involved: 25%) - John Poppins <john@xxxxxxx> (involved: 25%) - Jon Stewart <jon@xxxxxxxxxxx> (involved: 50%) - Pablo Escobar <pablo@xxxxxxxxxxx> (involved: 25%) + John Doe <john@xxxxxxx> (author: 25%) + John Poppins <john@xxxxxxx> (author: 25%) + Jon Stewart <jon@xxxxxxxxxxx> (signer: 25%, author: 25%) + Pablo Escobar <pablo@xxxxxxxxxxx> (author: 25%) EOF test_cmp expected actual " @@ -67,9 +67,9 @@ test_expect_success "multiple patches" " test_expect_success "from committish" " git related -1 master | sort > actual && cat > expected <<-EOF && - John Doe <john@xxxxxxx> (involved: 33%) - John Poppins <john@xxxxxxx> (involved: 33%) - Jon Stewart <jon@xxxxxxxxxxx> (involved: 66%) + John Doe <john@xxxxxxx> (author: 33%) + John Poppins <john@xxxxxxx> (author: 33%) + Jon Stewart <jon@xxxxxxxxxxx> (signer: 33%, author: 33%) EOF test_cmp expected actual " @@ -77,9 +77,9 @@ test_expect_success "from committish" " test_expect_success "from single rev committish" " git related -1 master | sort > actual && cat > expected <<-EOF && - John Doe <john@xxxxxxx> (involved: 33%) - John Poppins <john@xxxxxxx> (involved: 33%) - Jon Stewart <jon@xxxxxxxxxxx> (involved: 66%) + John Doe <john@xxxxxxx> (author: 33%) + John Poppins <john@xxxxxxx> (author: 33%) + Jon Stewart <jon@xxxxxxxxxxx> (signer: 33%, author: 33%) EOF test_cmp expected actual " -- 1.8.4-fc -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html