#!/usr/bin/perl

$repertoire = shift;
# 1° paramère à la ligne de commande

$pwd =`pwd`;
chomp $pwd;

# déterminer le répertoire observé (en chemin absolu)
if ($repertoire eq "") {
	# si pas d'argument : par défaut on observe le répertoire courant
	$repertoire_observe = $pwd;
} elsif ( ! -d $repertoire) {
	print "L'argument doit être un répertoire :";
	print "$repertoire n'est pas  un répertoire :";
	exit;
} elsif ($repertoire =~ /^\//) {
	# il est déjà absolu
	$repertoire_observe = $repertoire;
} elsif ($repertoire =~ /^\.\./) {
	print "Ce script ne prend pas encore en compte les chemins relatifs avec 'parent'";
	exit;	
} else {
	$repertoire =~ s/^\.\///;
	# enlever le './' initial du chemin relatif
	$repertoire =~ s/^\.//;
	# sinon, enlever le '.' du répertoire courant
	$repertoire_observe = "$pwd/$repertoire";
	# et le concaténer au répertoire courant
}


print "répertoire observé :";
print "\n";
print "$repertoire_observe";
print "\n";
print "\n";

# noms des fichers plus descriptifs : 'lsr_before' et 'lsr_after'
$lsr = `/bin/ls -R $repertoire_observe > lsr_before`;
# sauvegarder l'état de départ des fichiers dans $repertoire dans le fichier 'lsr_before'

print "créez ou supprimez un fichier (dans $repertoire_observe, ou sous-répertoire)\n";
print "\npuis faites 'ENTER'\n";
$stdin = <STDIN>;
# entrée au clavier : ne sert qu'à attendre le 'ENTER', on n'utilise pas la valeur entrée

$lsr2 = `/bin/ls -R $repertoire_observe > lsr_after`;
# sauvegarder l'état final des fichiers dans $repertoire dans le fichier 'lsr_after'


$difflsr = `diff lsr_before lsr_after`;
# détecter la différence départ/final par la commande 'diff' et le mettre dans la variable $difflsr
print $difflsr;
# l'afficher

@difflsr = split(/\n/, $difflsr);
# transformer en vecteur par split
foreach (@difflsr) {
# parcourir le vecteur
	chomp;
	if (/^\d+/) {
	# si la ligne commence par un nombre
# 		s/^(\d+).*/$1/;
# 		# le récupérer
# cette partie était incohérente dans les versions précédantes :
# le nombre en début de ligne concerne le numéro de ligne dans le fichier 'lsr_before' (ex 'lsr')
# et je l'utilisais pour le fichier 'lsr_after' (ex 'lsr2')
# je passe à la récupération des numéros de ligne dans le fichier 'lsr_after'
# qui sont après la lettre indiquant le type de modification
 		s/^(\d+),{0,1}\d*[acd](\d+).*/$2/;
		$line = $_;
		$directory_nb++;
		# incrémenter le nombre de répertoires contenant des fichiers créés/supprimés
		# REMARQUE : les indices utilisés dans 'lsr9' [$line] n'étaient pas corrects !
		$line_files[$directory_nb] = "$line\t";
		# c'est un numéro de ligne dans le fichier final (ici 'lsr_after')
		# je structure les composantes du vecteur @line_files ainsi :
		# line\tfile\nfile\nfile\nfile\n ...
		
	} else {	
		# je garde les '>' et '<' pour distinguer les création des suppressions
		$line_files[$directory_nb] .= "$_\n";
		# REMARQUE : les indices utilisés dans 'lsr9' [$line] n'étaient pas corrects !
		# et l'ajouter (par .=)
		# ce qui suit ' >' (ou ' <') est le nom du fichier
	}

}

# on a maintenant le numéro de ligne où il y a une différence
# et quelle est cette différence (= les noms des fichiers)

foreach (@line_files) {
	if (/^\d+/) {
		# les récupérer par un split :
		($line, $files) = split(/\t/, $_);
		if ($line eq "") {
			next;
			# pour ne pas tenir compte de la composante d'indice '0' de @line_files
			# qui ne contient rien
		}
		print "\n";
		print "à la ligne ";
		print "\n";
		print $line;
		print "\n";
		print "du fichier 'lsr_after'\n";
		print "il y a une différence avec le fichier 'lsr_before'";
		print "\n";
		print "Elle concerne les noms de fichier :\n";
		print $files;
	}
}


# pour savoir dans quel répertoire ce fichier se trouve
# on va parcourir le fichier 'lsr2'
# qui contient une liste de répertoires relatifs
# chacun suivi des noms des fichiers qu'il contient
print "\n";
print "répertoires mentionnés dans 'lsr2' :";
print "\n";

if ($difflsr ne "") {
	open(LSR2, "<lsr2");
	while (<LSR2>) {
		$linenb++;
		if (/^\//) {
		# si la ligne commence par un /, c'est le chemin absolu d'un répertoire
			chomp;
			s/:$//;
			$absolute_directory = $_;
			print "$absolute_directory";
			print "\n";
			# et on l'affiche
		}
		if ($linenb == $line) {
		# si on atteint le numéro de ligne qui concerne le fichier modifié
			last;
			# on s'arrête : il est dans le dernier répertoire détecté
		}
	}
		

}

print "\n";
print "Dans le répertoire $absolute_directory";
print "\n";

print "les fichier suivants ont été supprimé/créé :";
print "\n";
foreach (@files) {
	s/^>/> /;
	s/^</< /;
	# remettre l'espace
	print;
	print "\n";
}
print "\n";

 


