#!/bin/bash # # works on Linux with sh-utils-2.0-13 (RH 7.1) and gnu sed # bk parent >/dev/null 2>&1 if [ $? -ne 0 ] ; then echo Error: Not in a BK directory 1>&2 exit 1 fi dump=/bin/false while [ $# -ge 1 ] do case $1 in ( "--dump" ) dump=/bin/true shift; ;; ( * ) break; ;; esac shift done if [ $# -eq 0 ] ; then cwd=`/bin/pwd` root=`bk root` if [ $cwd = $root ] ; then wanted="." else wanted=`echo $cwd | sed "s#^$root/##"` fi cd $root files=`bk -r sfiles -Ug \ | bk prs -r+ -hnd'$if(:ENC:=ascii){:DPN:}' - \ | grep "^$wanted"` else files=$* fi allusers= for file in $files do echo "${file}:" users=`bk get -ump $file 2>/dev/null | awk '{print $1}' | sort | uniq` for user in $users do allusers="$allusers $user" count=`bk get -ump 2>/dev/null $file | grep "^$user" \ | sed -e 's#/\*.*\*/##' \ -e 's#/\*.*##' \ -e 's#//.*##' \ | grep -v \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\*/[ ]*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*[}{][ ]*$" \ | grep -v \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\* " \ | wc -l | sed 's/^ *//'` $dump && bk get -ump 2>/dev/null $file | grep "^$user" \ | sed -e 's#/\*.*\*/##' \ -e 's#/\*.*##' \ -e 's#//.*##' \ | grep -v \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\*/[ ]*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*[}{][ ]*$" \ | grep -v \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\*$" \ -e "^$user[ ]*[0-9\.]*\.[0-9]*[ ]*\* " estr="$user=\${"$user":=0}" eval $estr estr="$user=\$(( \$$user + $count ))" eval $estr # line up the output if [ `echo $user | wc -c` -lt 9 ] ; then user="$user " fi echo " $user $count" done allusers=`for user in $allusers do echo $user done | sort | uniq` done if [ $# -ne 1 ] then echo TOTALS: for user in $allusers do estr="count=\$$user" eval $estr # line up the output if [ `echo $user | wc -c` -lt 9 ] ; then user="$user " fi echo " $user $count" done fi