Felipe Contreras <felipe.contre...@gmail.com> writes:

> This script find people that might be interesting in a patch, by going
> back through the history for each single hunk modified, and finding
> people that reviewed, acknowledge, signed, or authored the code the
> patch is modifying.
>
> It does this by running 'git blame' incrementally on each hunk, and then
> parsing the commit message. After gathering all the relevant people, it
> groups them to show what exactly was their role when the participated in
> the development of the relevant commit, and on how many relevant commits
> they participated. They are only displayed if they pass a minimum
> threshold of participation.
>
> For example:
>
>   % git cc-cmd 0001-remote-hg-trivial-cleanups.patch
>   Felipe Contreras <felipe.contre...@gmail.com> (author: 100%)
>   Jeff King <p...@peff.net> (signer: 83%)
>   Max Horn <m...@quendi.de> (signer: 16%)
>   Junio C Hamano <gits...@pobox.com> (signer: 16%)

Should the contribution weight for each role add up to (close to)
100% if there were no minimum cut-off?

In general, it is not all that clear what these numbers mean.  Does
a sign/review on a single commit, no matter what kind of commit it
is or how big it is, count as contribution with the same weight?

I am not saying that the counting criteria needs to be configurable.
It just needs to be explainable to the end users.

> +commits = Commits.new
> +commits.from_patch(ARGV[0])
> +commits.import
> +
> +# hash of hashes
> +persons = Hash.new { |hash, key| hash[key] = {} }
> +
> +commits.items.values.each do |commit|
> +  commit.roles.each do |person, role|
> +    persons[person][role] ||= 0
> +    persons[person][role] += 1
> +  end
> +end
> +
> +persons.each do |person, roles|
> +  roles = roles.map do |role, count|
> +    percent = count.to_f * 100 / commits.size
> +    next if percent < $min_percent
> +    '%s: %u%%' % [role, percent]
> +  end.compact
> +  next if roles.empty?
> +
> +  name, email = person
> +  # must quote chars?
> +  name = '"%s"' % name if name =~ /[^\w \-]/i
> +  person = name ? '%s <%s>' % [name, email] : email
> +  puts '%s (%s)' % [person, roles.join(', ')]
> +end
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to