#!/usr/bin/perl -w

Init();

open(FILES,"find $CONFIG_PROTECT -iname \"._cfg????_*\" |") || die;
my @files=<FILES>;
chomp(@files);
@files = grep (-e $_, @files);
print "# Files not changed since install:\n";
for $file (@files) {
    my $known=known_realfile($file);
    $known and print "mv $file\t$known\n";
}
map { record_file($_); } @files;

sub Init {
    use Digest::MD5;
    chomp($CONFIG_PROTECT=`/usr/lib/portage/bin/portageq config_protect`);
    chomp($CONFIG_PROTECT_MASK=`/usr/lib/portage/bin/portageq config_protect_mask`);
    @CONFIG_PROTECT=split(/\s+/,$CONFIG_PROTECT);
    $base_dir="/var/db/config_files"; mkdir ($base_dir);
}


sub known_realfile {
    my $realfile=shift;
    my $filename=$realfile;
    $filename=~s:/\._cfg...._:/:; $filename=~s:/:_:g; $filename=~s:\.:_:g;
    $realfile=~s:/\._cfg...._:/:;
    my $md5_realfile = md5_of($realfile);
    if(-e "$base_dir/$filename") {
	open (RECORD,"<$base_dir/$filename") || warn ("open (RECORD,<$base_dir/$filename) failed");
	my @md5known = <RECORD>;
	chomp(@md5known);
	for (@md5known) {
	    if($_ eq $md5_realfile) { return $realfile }
	}
    }
    return undef;
}

sub record_file {
    my $file=shift;
    my $filename=$file;
    $filename=~s:/\._cfg...._:/:; $filename=~s:/:_:g; $filename=~s:\.:_:g;
    open (RECORD,">>$base_dir/$filename") || die ("open (RECORD,>>$base_dir/$filename) failed");
    print RECORD md5_of($file),"\n";
    close RECORD;
}

sub md5_of {
    my $srcfile = shift;
    my $srcmd5 = Digest::MD5->new;
    open(SRCFILE,$srcfile) || die;
    $srcmd5->addfile(*SRCFILE);
    close SRCFILE;
    return($srcmd5->hexdigest);
}


