#!/bin/sh

DARCS=darcs
[ "`basename "$0"`" = e2 ] && DARCS=darcs2

auSecours()
{
	nom=`basename "$0"`
	cat >&2 << TERMINE
# $nom
# enregistre les modifs sous darcs
# © Guillaume Outters 2004-2005

Utilisation: $nom [-d] [-n] [-D] <résumé> [<commentaire>]
  résumé: nom de la rustine.
  commentaire: séparer les différents points par des pipes. Ils seront remplacés
               par des retours à la ligne dans le commentaire enregistré. S'il
			   n'est pas présent, il sera récupéré sur l'entrée standard.
  -d: demander pour chaque modification si elle doit être enregistrée.
  -n: ne pas effectuer les tests. darcs, par défaut, peut lancer des programmes
      de non-régression relativement longs avant d'accepter les modifications.
TERMINE
	exit 1
}

[ $# -lt 1 ] && auSecours

derniereRevision()
{
	awk -F . '{
			for(i = 0; i < taille; ++i)
				if($(i+1) < version[i])
					break;
			if(i >= taille)
				for(taille = 0; $taille != ""; ++taille)
					version[taille] = $(taille+1);
		}
		END{
			--taille;
			printf("%d", version[0]);
			for(i = 1; i < taille; ++i)
				printf(".%d", version[i]);
		}'
}

trouverNouvelleRevision()
{
	# On récupère les noms de révisions de darcs changes (chaque nom suit la
	# ligne de date de la révision, qui est la seule collée à gauche). On
	# en prélève le numéro de révision (d'après notre format, une rustine a
	# pour nom quelque chose comme: <rev1>,<rev2>: <résumé>, rev1 et rev2 étant
	# le numéro de révision de la rustine dans le contexte d'une branche (par
	# exemple rustine de la 0.3 reversable dans la 0.2, on a alors 0.3.4,0.2.9).
	# En fin de compte, on passe le tout a derniereRevision().
	derniere=`$DARCS changes -q | sed -e '/^$/d' -e '/^[^ ]/{
h
d
}' -e '/^ /{
x
s/.//g
x
t-)
d
:-)
}' -e 's/^  \* //' -e 's/:.*$//' | tr , '\012' | derniereRevision`
}

datation()
{
	dernierFichier="`ls -td "$@" 2> /dev/null | head -1`"
	dateDernierFichier="`stat -f "%m" "$dernierFichier"`"
	date -r "$dateDernierFichier" "+%Y-%m-%d %H:%M:%S"
}

#options="-a"
[ "x$1" = x-d ] && shift && options=
[ "x$1" = x-n ] && shift && options="$options --no-test"
[ "`basename "$0"`" = et ] && tempsFichiers=oui # Bon, au final ça ne marche guère.
> /tmp/$$
if [ "$tempsFichiers" = oui ]
then
	options="$options --pipe"
	datation "$@"
	(
		while [ ! -d "_darcs" -a ! "`pwd`" = / ]
		do
			cd ..
		done
		sed -e 's/ *#.*$//' -e '/^ *$/d' < _darcs/prefs/author
	)
fi >> /tmp/$$.2
echo "$1" >> /tmp/$$
shift
if [ $# -gt 0 ] ; then
	echo "$1" | tr '|' '\012'
	shift
else
	cat
fi >> /tmp/$$
if [ "$tempsFichiers" = oui ]
then
	( cat /tmp/$$.2 ; cat ) | $DARCS record $options --logfile=/tmp/$$ "$@"
else
	$DARCS record $options --logfile=/tmp/$$ "$@"
fi
rm /tmp/$$
