#!/bin/sh # # get-authors # Copyright (c) 2009-2021 The cvc5 Project # # usage: get-authors [ files... ] # # This script uses git blame -w -N -C to get the original author # gituser="`git config user.name` <`git config user.email`>" while [ $# -gt 0 ]; do f=$1 shift if ! grep -q " Top contributors" "$f" then header_lines=0 else header_lines=$(grep "^ \*\/" "$f" -m 1 -n | cut -d ':' -f 1) if [ -z $header_lines ]; then header_lines=$(grep "^##$" "$f" -m 3 -n | tail -n 1 | cut -d ':' -f 1) [ -z "$header_lines" ] && header_lines=0; fi fi ((header_lines++)) total_lines=$(wc -l "$f" | awk '{print$1}') # Note: Instead of using the porcelain format, we extract the author name # information from the humand readable format since it prints the source code # and we want to exclude specific lines of code. # Each line looks a follows: # # sha1 filename (Author Name 2019-03-25 13:36:07 -0800 42) code ... git blame -w -M -C -L $header_lines,$total_lines "$f" | \ # Discard everthing left to first '(' awk -F '(' '{print $2}' | \ # Discard the source code left to first ')' and omit lines that begin # with: # (1) #include # (2) namespace # (3) } ... namespace ... # (4) empty lines # awk -F ')' \ '$2 !~ /^[ \t]*(#include|namespace|}.*namespace.*|[ \t]*$)/ {print $1}' | \ # Keep author names only, remove the last 4 columns in ( ... ) awk 'NF{NF-=4};1' | \ # Fix author names sed "s,Not Committed Yet ,$gituser," | \ sed 's/PaulMeng/Paul Meng/' | \ sed 's/barrettcw/Clark Barrett/' | \ sed 's/Andres Nötzli/Andres Noetzli/' | \ sed 's/Andres Notzli/Andres Noetzli/' | \ sed 's/guykatzz/Guy/' | \ sed 's/Guy Katz/Guy/' | \ sed 's/Guy/Guy Katz/' | \ sed 's/makaimann/Makai Mann/' | \ sed 's/Martin Brain/Martin/' | \ sed 's/Martin/Martin Brain/' | \ sed 's/nafur/Gereon Kremer/' | \ sed 's/justinxu421/Justin Xu/' | \ sed 's/yoni206/Yoni Zohar/' | \ sed 's/ayveejay/Andrew V. Jones/' | \ sed 's/FabianWolff/Fabian Wolff/' | \ sed 's/mudathirmahgoub/Mudathir Mohamed/' | \ sed 's/mcjuneho/Michael Chang/' | \ # Determine top three contributors sort | uniq -c | sort -rn | head -n3 | \ # Remove first columns from uniq -c (number of lines) awk '{$1=""; print}' | \ # Comma separated list of author names, remove leading whitespaces, and # remove trailing comma tr '\n' ', ' | sed 's/^[ \t]*//' | sed 's/,$/\n/' done