Re: [PATCH v3 01/11] Add new git-cc-cmd helper to contrib
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 19, 2013, 22:13 UTC
- Message-ID
- <7vy5cexj7y.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1366399831-5964-2-git-send-email-felipe.contreras@gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 19 quoted lines
> 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@gmail.com> (author: 100%) > Jeff King <peff@peff.net> (signer: 83%) > Max Horn <max@quendi.de> (signer: 16%) > Junio C Hamano <gitster@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.
Show 28 quoted lines
> +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