#!/usr/local/bin/perl

$x509="../x509";

($#ARGV >= 0) || die "usage: $0 files or dirs to re-organise\n";

foreach (@ARGV)
	{
	push(@files,&dodir($_)) if (-d $_);
	push(@files,$_) if (-f $_);
	}

foreach $f (@files)
	{
	$h=`$x509 -hash -noout -in $f 2>/dev/null`;
	next unless $? == 0;
	chop $h;
	$map{$h}.=$f." ";
	}

foreach (keys %map)
	{
	$v=$map{$_};
	chop($v);
	$n=0;
	foreach $f (split(/\s+/,$v))
		{
		$nns=$_.".$n";
		$ff=$f;
		$ff =~ s#^.*/([^/]+)$#\1#;
		next if ($nns eq $ff);
		$ns=$nns.".new";
		print "rename $f -> $nns\n";
		die "$ns exists\n" if (-f $ns);
		rename($f,$ns) || die "unable to rename $f -> $ns:$!\n";
		push(@rn,$ns);
		$n++;
		}
	}

foreach (@rn)
	{
	$_ =~ /^(.*)\.new$/;
	rename($_,$1) || die "unable to rename $_ -> $1:$!\n";
	}

sub dodir
	{
	local($dir)=@_;
	local($_,*DIR,@files);

	opendir(DIR,$dir) || die "unable to opendir($dir):$!\n";
	@dirs=readdir(DIR);
	closedir(DIR);
	foreach (@dirs)
		{
		next unless /^[0-9a-f]{8}.\d$/;
		push(@files,"$dir/$_");
		}
	return(@files);
	}
