#!/bin/sh

N_MOIS=3

filtreAuteurs()
{
	egrep -i "$AUTEURS"
}

histo_darcs()
{
	darcs log --xml-output --match 'date "last '$N_MOIS' months"' | awk \
'
/<patch/{ sub(/.* date=["'\'']/, ""); sub(/["'\''].* local_date=["'\'']/, " "); sub(/["'\''].*/, ""); dates = $0; }
/<name>/{
	sub(/.*<name>/, "");
	sub(/<\/name>.*/, "");
	gsub(/&amp;/, "\\&");
	gsub(/&apos;/, "'\''");
	gsub(/&gt;/, ">");
	gsub(/&lt;/, "<");
	gsub(/&quot;/, "\"");
	print dates" # "$0;
}
'
}

histo_git()
{
	( git log --since="$N_MOIS months ago" --pretty=format:'%ae %at %ad # %s' ; echo ) | filtreAuteurs | while read adrel d reste
	do
		[ -n "$d" ] || continue
		d="`TZ= date -r $d +%Y%m%d%H%M%S`"
		echo "$d $reste"
	done
}

histo()
{
	local d n=31 histo t=/tmp/temp.histo.$$ num=0
	rm -f $t.* 2> /dev/null
	for d in "$@"
	do
		case "$n" in
			96) n=32 ;;
			36) n=90 ;;
			*) n=`expr $n + 1` ;;
		esac
		{
		chemin="`echo "$d" | sed -e 's/.*\(..............\)$/@\1/' -e 's/$/                /' -e 's/^\(...............\).*/\1/' -e 's/^@/…/'`"
		if [ -d "$d/_darcs" ] ; then histo=histo_darcs
		elif [ -d "$d/.git" ] ; then histo=histo_git
		else
			echo "[31m# $d n'est pas un dossier darcs.[0m" >&2
			continue
		fi
		( cd "$d" && $histo ) | sed -e "s|[ 	]*#[ 	]*|	[${n}m$chemin[0m	|" 
		} > $t.$num.liste &
		num=$((num+1))
	done
	wait
	cat $t.*.liste | sort | cut -d ' ' -f 2-
	rm -f $t.*
}

[ -n "$AUTEURS" ] || filtreAuteurs() { cat ; }
if [ $# -gt 0 ]
then
	histo "$@"
else
	histo .
fi
