123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/usr/bin/env bash
- FORMAT="%aN,<%aE>" #Set git output format in "Name,<Email>" //Capital in aN and aE means replace str based on .mailmap
- TARGET=(examples lkmpg.tex) #Target files we want to trace
- DIR=`git rev-parse --show-toplevel` #Get root dir of the repo
- TARGET=("${TARGET[@]/#/$DIR/}") #Concat $DIR BEFORE ALL elements in array TARGET
- #The str in each line should be Username,<useremail>
- function gen-raw-list()
- {
- git log --pretty="$FORMAT" ${TARGET[@]} | sort -u
- }
- function parse-list()
- {
- > Contributors # Clear contributors' list (Overwrite with null)
- while read -r line; do
- User=`echo "$line" | awk -F "," '{print $1}'`
- if [[ `grep -w "$User" Exclude` ]]; then
- echo "[skip] $User"
- continue;
- fi
- echo "[Add] $User"
- MainMail=`echo "$line" | awk -F "[<*>]" '{print $2}'`
- Emails=(`cat $DIR/.mailmap | grep -w "$User" | awk -F "[<*>]" '{print $4}' | sort -u`)
- for Email in ${Emails[@]}; do
- if [[ "$Email" != "$MainMail" ]]; then
- line="$line,<$Email>";
- fi
- done
- echo "$line" >> Contributors
- done <<< $(gen-raw-list)
- cat Include >> Contributors
- }
- function sort-list()
- {
- if [[ `git diff Contributors` ]]; then
- sort -f -o Contributors{,}
- git add $DIR/scripts/Contributors
- fi
- }
- #For all lines before endline, print "name, % <email>"
- #For endline print "name. % <email>"
- function gen-tex-file()
- {
- cat Contributors | awk -F "," \
- ' BEGIN{k=0}{name[k]=$1;email[k++]=$2}
- END{
- for(i=0;i<k;i++){
- name[i]=(i<k-1)?name[i]",":name[i]".";
- printf("%-30s %% %s\n",name[i],email[i]);
- }
- }
- '
- }
- parse-list
- sort-list
- gen-tex-file > $DIR/contrib.tex
|