git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Felipe ContrerasNext: Felipe Contreras
Message 4 of 17 in “Add new git-cc-cmd helper to contrib”
  1. 00/11 Add new git-cc-cmd helper to contribFelipe Contreras, Apr 19, 2013
  2. 01/11 Add new git-cc-cmd helper to contribFelipe Contreras, Apr 19, 2013
  3. Felipe ContrerasApr 19, 2013
  4. Junio C HamanoApr 19, 2013
  5. 02/11 contrib: cc-cmd: add option parsingFelipe Contreras, Apr 19, 2013
  6. 03/11 contrib: cc-cmd: add support for multiple patchesFelipe Contreras, Apr 19, 2013
  7. 04/11 contrib: cc-cmd: add option to show commitsFelipe Contreras, Apr 19, 2013
  8. 05/11 contrib: cc-cmd: add option to parse from committishFelipe Contreras, Apr 19, 2013
  9. 06/11 contrib: cc-cmd: parse committish like format-patchFelipe Contreras, Apr 19, 2013
  10. 07/11 contrib: cc-cmd: fix parsing of rev-list argsFelipe Contreras, Apr 19, 2013
  11. 08/11 contrib: cc-cmd: add option to fetch aliasesFelipe Contreras, Apr 19, 2013
  12. 09/11 contrib: cc-cmd: support multiple rolesFelipe Contreras, Apr 19, 2013
  13. 10/11 contrib: cc-cmd: sort by participationFelipe Contreras, Apr 19, 2013
  14. 11/11 contrib: cc-cmd: ignore chunks with no original linesFelipe Contreras, Apr 19, 2013
  15. Junio C HamanoApr 19, 2013
  16. Duy NguyenApr 20, 2013
  17. Felipe ContrerasApr 20, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.