Felipe Contreras <[email protected]> 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 <[email protected]> (author: 100%)
> Jeff King <[email protected]> (signer: 83%)
> Max Horn <[email protected]> (signer: 16%)
> Junio C Hamano <[email protected]> (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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html