cpdup - Add -VV to ignore mtime
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 2 Mar 2010 23:58:07 +0000 (15:58 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 2 Mar 2010 23:58:07 +0000 (15:58 -0800)
* The cpdup -V option verifies the contents of the files even if the
  mtime is the same, but also (currently) recopies the file without
  bothering to verify the contents if the mtime is different, even if
  the contents is the same.

* Add an extension, -VV, which verifies the contents of the file and
  ignores mtime entirely.  A copy is only made if the ownerchip,
  flags, modes, or content differs.

bin/cpdup/cpdup.1
bin/cpdup/cpdup.c
bin/cpdup/misc.c

index d41d4e7..5abc632 100644 (file)
@@ -27,6 +27,7 @@
 .Op Fl H Ar path
 .Op Fl M Ar file
 .Op Fl V
+.Op Fl VV
 .Op Fl S
 .Op Fl k
 .Op Fl K Ar file
@@ -182,6 +183,11 @@ files appear to the be the same.  Whereas the
 (force) option forces a copy regardless, this option will avoid rewriting
 the target if everything matches and the contents are verified to be the
 same.
+.It Fl VV
+This works the same as
+.Fl V
+but ignores mtime entirely, making it suitable for comparing HAMMER
+master and slave filesystems or copies made without mtime retention.
 .It Fl S
 This places
 .Nm
index 9e17641..f4b3b90 100644 (file)
@@ -204,7 +204,7 @@ main(int ac, char **av)
            setlinebuf(stderr);
            break;
        case 'V':
-           ValidateOpt = 1;
+           ++ValidateOpt;
            break;
        case 'I':
            SummaryOpt = 1;
@@ -809,7 +809,7 @@ relink:
        } else {
            if (ForceOpt == 0 &&
                st1.st_size == st2.st_size &&
-               st1.st_mtime == st2.st_mtime &&
+               (ValidateOpt == 2 || st1.st_mtime == st2.st_mtime) &&
                OwnerMatch(&st1, &st2)
 #ifndef NOMD5
                && (UseMD5Opt == 0 || !S_ISREG(st1.st_mode) ||
index d3e8486..5fb0ff5 100644 (file)
@@ -177,11 +177,12 @@ fatal(const char *ctl, ...)
             "                copying if the compare fails\n"
             "    -M file     -m+specify MD5 checkfile, else .MD5_CHECKSUMS\n"
             "                copy if md5 check fails\n"
+#endif
             "    -H path     hardlink from path to target instead of copying\n"
             "                source to target, if source matches path.\n"
             "    -V          verify file contents even if they appear\n"
             "                to be the same.\n"
-#endif
+            "    -VV         same as -V but ignore mtime entirely\n"
             "    -x          use .cpignore as exclusion file\n"
             "    -X file     specify exclusion file\n"
             " Version 1.16 by Matt Dillon and Dima Ruban\n"