Skip to content

felipec/git-related

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This tool finds people that might be interested in a patch series, by going back through the history of each single hunk modified, and finding authored the code the patch is modifying.

It does this by running git blame incrementally on each hunk, and finding the relevant commits. The relevant commits are counted for each person, and people are only displayed if they pass a minimum threshold of participation.

For example:

% git related master..topic
  Felipe Contreras <felipe.contreras@gmail.com> (25%)
  Sverre Rabbelier <srabbelier@gmail.com> (17%)
  Elijah Newren <newren@gmail.com> (10%)
  Jeff King <peff@peff.net> (10%)
  Shawn O. Pearce <spearce@spearce.org> (5%)

Additionally, it’s able to parse commit trailers (e.g. Signed-off-by, Reviewed-by), and group the roles of each person.

For example:

% git related --roles master..topic
  Junio C Hamano <gitster@pobox.com> (signer: 90%, author: 5%)
  Felipe Contreras <felipe.contreras@gmail.com> (author: 25%, reviewer: 2%)
  Sverre Rabbelier <srabbelier@gmail.com> (author: 17%, acker: 2%, signer: 7%)
  Jeff King <peff@peff.net> (acker: 17%, author: 10%)
  Shawn O. Pearce <spearce@spearce.org> (author: 5%, signer: 2%, observer: 2%)
  Elijah Newren <newren@gmail.com> (author: 10%)

Moreover, it has an option to output the list of commits, instead of the contributors, which allows you to easily find out the previous changes to the lines your patches modify.

% git related --commits master..topic
  99d9ec0 Merge branch 'fc/transport-helper-no-refspec'
  67c9c78 transport-helper: barf when user tries old:new
  0460ed2 documentation: trivial style cleanups
  126aac5 transport-helper: fix remote helper namespace regression
  21610d8 transport-helper: clarify pushing without refspecs
  a93b4a0 transport-helper: warn when refspec is not used
  664059f transport-helper: update remote helper namespace
  c4458ec fast-export: Allow pruned-references in mark file
  ...

Plus, when sending patches for review, you can configure git send-email to use git related to find relevant people that should be cc’ed:

% git send-email --cc-cmd='git related' *.patch

git-who

A very similar tool but it gathers all commits, not just the ones related to a branch.

You can specify a file, directory, or pathspec, just like with git log.

If nothing is specified, it lists all the people that have had a role in the whole tree.

% git who -- lib/

Installation

Install the parseopt gem:

% gem install parseopt

Then simply copy the script anywhere in your $PATH and make it executable, or run make install which will install it by default to your ~/bin/ directory (make sure it’s in your $PATH).