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