Re: [PATCH v3 01/11] Add new git-cc-cmd helper to contrib

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Felipe Contreras <felipe.contreras@xxxxxxxxx> 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.contreras@xxxxxxxxx> (author: 100%)
>   Jeff King <peff@xxxxxxxx> (signer: 83%)
>   Max Horn <max@xxxxxxxxx> (signer: 16%)
>   Junio C Hamano <gitster@xxxxxxxxx> (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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]