Last active
January 31, 2017 17:04
-
-
Save designfrontier/9824d98c9f0940c00f20b11a9b8cd944 to your computer and use it in GitHub Desktop.
foresight: A way to find major owners of files you have changed in your commit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -e | |
function ADD_AUTHOR { | |
local author_to_add=$1 | |
if ! [ -z "${author_to_add}" ]; then | |
#add something to add people to review in your source repo | |
fi | |
} | |
function CHECK_OWNERSHIP { | |
local line=$1 | |
read -a input <<< "${line}" | |
local size=${input[0]} | |
local owned_lines=${input[1]} | |
local author=${input[2]} | |
local file_path=${input[3]} | |
local ownership="$(bc -l <<< "scale=1; ($owned_lines/$size)*100")" | |
local is_owner="$(bc -l <<< "$ownership>=20")" | |
if [ $is_owner -eq 1 ]; then | |
echo $author " owns: " $ownership " percent of " $file_path | |
ADD_AUTHOR $author | |
fi | |
} | |
function GET_EMAIL { | |
while read data; do | |
echo "$data" | grep -E -o "<\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b>"\ | |
| grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"; | |
done; | |
} | |
function PROCESS_FILE { | |
local FILE_PATH=$1 | |
local FILE_SIZE="$(cat $(echo $FILE_PATH) | wc -l)" | |
# Find the people with current ownership | |
git blame --show-email HEAD~1 -- $1 2> /dev/null | GET_EMAIL | sort | uniq -c\ | |
| while read line; do CHECK_OWNERSHIP "$FILE_SIZE $line $FILE_PATH"; done | |
} | |
function FORESIGHT { | |
echo "FORESIGHT!" | |
echo "Looking into the past to save the future..." | |
echo "-------------------------------------------" | |
git diff-tree --no-commit-id --name-only -r HEAD \ | |
| while read line; do PROCESS_FILE "$line"; done | sort | uniq | |
echo "-------------------------------------------" | |
echo "" | |
} |
just added a bit to check for who created the file and add pull them as well
To use Foresight you will need to source it in your env file
So if you are using zsh
you would add . ~/path/to/foresight.sh
to your .zshrc
file.
Basically the same instructions for bash just in your .bashrc
file.
Then you will have FORESIGHT
as a command that you can run from your console!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Outputs the emails for each person with >20% ownership of any file in your commit. Involving these owners in communication about changes to files they own has been shown to reduce the number of bugs in research done by microsoft.