3 use Digest
::MD5
qw(md5_hex);
5 die "usage: perl buildTreeFileDigest.pl <config_file> <digest_name> [<old_digest_name>]\n" if (scalar(@ARGV) < 2 || scalar(@ARGV) > 3 || $ARGV[0] eq "-h" || $ARGV[0] eq "-?");
22 opendir(DIR
, $source) || die "could not open source directory $source\n";
23 my @filenames = readdir(DIR
);
28 next if ($_ eq "." || $_ eq "..");
34 &do_directory
($base, "$source/$_", "$_");
38 &do_directory
($base, "$source/$_", "$name/$_");
44 print "." if ($count % 500 == 0);
46 ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat("$source/$_");
50 if (defined $old{"$name/$_"})
52 ($oldName, $oldPath, $oldSize, $oldTime, $oldDigest) = split(/\s+/, $old{"$name/$_"}, 5);
53 if ($size == $oldSize && $mtime == $oldTime)
56 # print "cached $name/$_ '$md5sum'\n";
60 # print "changed $name/$_ !($size==$oldSize && $mtime==$oldTime)\n";
66 open(FILE
, "$source/$_") || die "could not spawn md5sum on file $source/$_";
68 read(FILE
, $buffer, -s
"$source/$_");
70 $md5sum = md5_hex
($buffer);
71 # print "compute $name/$_ $md5sum\n";
74 $files{"$name/$_"} = "$name/$_ $base $size $mtime $md5sum";
81 open(DIGEST
, shift) || die "could not open old digest file\n";
85 ($oldName, $oldPath, $oldSize, $oldTime, $oldDigest) = split(/\s+/, $_);
86 # print "caching $oldName: $_\n";
93 open(CONFIG
, $configFile) || die "could not open config file $configFile\n";
107 foreach (sort numerically
@paths)
110 ($priority, $path) = split(/=/);
111 print "processing $path($priority)";
112 do_directory
($path, $path, "");
116 open(DIGEST
, ">$digest");
117 foreach (sort keys %files)
119 print DIGEST
$files{$_}, "\n";