Digest::SHA: deprecate Digest::SHA1, bump version to 0.20120914 and copyright year...
[dupemerge] / faster-dupemerge
index f7334d775cea316ffee6963cb6be11f4249297eb..62f4bc99c47b401bff653a252366eb9ef11e28e2 100755 (executable)
@@ -4,7 +4,7 @@ use Fcntl qw(:DEFAULT :flock);
 use File::Compare;
 use File::Temp;
 
-# Copyright (C) 2002-2010 Zygo Blaxell <faster-dupemerge@mailtoo.hungrycats.org>
+# Copyright (C) 2002-2012 Zygo Blaxell <faster-dupemerge@mailtoo.hungrycats.org>
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -42,11 +42,11 @@ my $lost_bytes = 0;
 my $surprises = 0;
 
 eval '
-       use Digest::SHA1 qw(sha1 sha1_hex sha1_base64);
+       use Digest::SHA qw(sha1 sha1_hex sha1_base64);
 ';
 
 if ($@) {
-       warn "Digest::SHA1: $@\nUsing external md5sum program to generate hashes.\nPlease install Digest::SHA1 (libdigest-sha1-perl)";
+       warn "Digest::SHA: $@\nUsing external md5sum program to generate hashes.\nPlease install Digest::SHA";
 
        eval <<'DIGEST';
                sub really_digest {
@@ -72,7 +72,7 @@ DIGEST
                sub really_digest {
                        my ($filename) = (@_);
                        die "'$filename' is not a plain file" if (-l $filename) || ! (-f _);
-                       my $ctx = Digest::SHA1->new;
+                       my $ctx = Digest::SHA->new;
                        sysopen(FILE, $filename, O_RDONLY|O_NONBLOCK) or die "open: $filename: $!";
                        binmode(FILE);          # FIXME:  Necessary?  Probably harmless...
                        $ctx->addfile(\*FILE);
@@ -155,13 +155,14 @@ hard links).
                         S, s - lstat(2) (see source for details)
                         U - unlink(2)
                         . - all inodes with similar attributes done
-                       (123456) - current file size in bytes
+                        (123456) - current file size in bytes
 
         --sort          pass next options (up to --) to sort command
 
         --timestamps    mtime may be different for identical files
 
-        --skip-compare  skip byte-by-byte file comparisons
+        --skip-compare  skip byte-by-byte file comparisons,
+                        compare only file hashes
 
         --skip-hash[=N] skip calculation of hash function on files
                         larger than N bytes (default 1M).
@@ -174,6 +175,12 @@ hard links).
         --verbose       report files as they are considered
 
         --zeros         hard-link zero-length files too
+
+--skip-compare and --skip-hash can be combined, in which case a file is
+either hashed (if it is below the --skip-hash size threshold) or compared
+(if it is above), but never both.
+
+Version:  0.20120914
 USAGE
 }
 
@@ -242,7 +249,7 @@ while ($#ARGV >= 0) {
        }
 }
 
-@directories or usage;
+@directories or usage($0);
 
 if (defined($lock_file) && !$dry_run) {
        sysopen(LOCK_FILE, $lock_file, O_CREAT|O_RDONLY, 0666) or die "open: $lock_file: $!";
@@ -405,7 +412,7 @@ incumbent_file:
                                                }
 
                                                if (format_inode($incumbent_dev, $incumbent_ino) ne $incumbent) {
-                                                       warn "$incumbent_file: expected inode $incumbent, found $incumbent_dev:$incumbent_ino";
+                                                       warn "$incumbent_file: expected inode $incumbent, found ".format_inode($incumbent_dev, $incumbent_ino);
                                                        $surprises++;
                                                        next incumbent_file;
                                                }
@@ -426,7 +433,7 @@ candidate_file:
                                                        }
 
                                                        if (format_inode($candidate_dev, $candidate_ino) ne $candidate) {
-                                                               warn "$candidate_file: expected inode $candidate, found $candidate_dev:$candidate_ino";
+                                                               warn "$candidate_file: expected inode $candidate, found ".format_inode($candidate_dev, $candidate_ino);
                                                                $surprises++;
                                                                next candidate_file;
                                                        }
@@ -665,7 +672,7 @@ if ($humane) {
 
        sub space_numbers {
                my ($num) = @_;
-               1 while $num =~ s/(\d)(\d\d\d)( \d\d\d)*$/$1 $2$3/os;
+               1 while $num =~ s/(\d)(\d\d\d)((?: \d\d\d)*)$/$1 $2$3/os;
                $num = ' ' x ($max_num_len - length($num)) . $num;
                return $num;
        }