No functional changes. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/related/git-related | 71 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 15 deletions(-) diff --git a/contrib/related/git-related b/contrib/related/git-related index ffce839..3cac925 100755 --- a/contrib/related/git-related +++ b/contrib/related/git-related @@ -8,13 +8,59 @@ $min_percent = 10 $files = [] $rev_args = [] -class Commit +class Person + + attr_reader :roles + + def initialize(name, email) + @name = name + @email = email + @commits = {} + end + + def add_role(commit) + @commits[commit] = true + end + + def <=>(b) + self.size <=> b.size + end + + def size + @commits.size + end + + def to_s + '%s <%s>' % [@name, @email] + end + +end - attr_reader :persons +class Persons + + @@index = {} + + include Enumerable + + def each(&block) + @@index.values.each(&block) + end + + def self.get(name, email) + id = [name, email] + person = @@index[id] + if not person + person = @@index[id] = Person.new(name, email) + end + person + end + +end + +class Commit def initialize(id) @id = id - @persons = [] end def parse(data) @@ -23,17 +69,18 @@ class Commit if not in_body case line when /^author ([^<>]+) <(\S+)> (.+)$/ - @persons << '%s <%s>' % [$1, $2] + author = Persons.get($1, $2) + author.add_role(@id) when /^$/ in_body = true end else if line =~ /^(Signed-off-by|Reviewed-by|Acked-by|Cc): ([^<>]+) <(\S+?)>$/ - @persons << '%s <%s>' % [$2, $3] + person = Persons.get($2, $3) + person.add_role(@id) end end end - @persons.uniq! end end @@ -152,16 +199,10 @@ else end commits.import -count_per_person = Hash.new(0) - -commits.each do |id, commit| - commit.persons.each do |person| - count_per_person[person] += 1 - end -end +persons = Persons.new -count_per_person.each do |person, count| - percent = count.to_f * 100 / commits.size +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] end -- 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