Hi Sergey,

On Sat, Aug 08, 2009 at 08:00:21PM +0300, Sergey Poznyakoff wrote:
> Current git master implements the functionality proposed by your
> posting on 2009-03-29.  It is partially based on your patch.
[...]
> Would you please test it and inform me if it needs any further
> improvements?

I've updated the Owl package of tar to 1.22.90 with some patches, and
I've installed that on a couple of systems where incremental backups are
done nightly.  We'll see how it performs.  I intend to slowly deploy it
(or a newer version) on more systems.

While making this update, I've reviewed your changes against my older
tar-1.20-owl-error-handling.diff patch.  It appears that you missed(?)
two hunks: one in create.c: dump_regular_file() and the other in
incremen.c: scan_directory().  Additionally, I think that the call to
dir_removed_diag() in scan_directory() should pass cmdline, not false,
for top_level.  I've attached a patch fixing these three issues.

As usual, our current tar patches are available at:

http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/tar/

Thanks,

Alexander
diff -urp tar-1.22.90.orig/src/create.c tar-1.22.90/src/create.c
--- tar-1.22.90.orig/src/create.c       2009-08-09 07:38:01 +0000
+++ tar-1.22.90/src/create.c    2009-08-17 03:05:44 +0000
@@ -1080,7 +1080,7 @@ dump_regular_file (int fd, struct tar_st
                              size_left),
                    quotearg_colon (st->orig_file_name),
                    STRINGIFY_BIGINT (size_left, buf)));
-         if (! ignore_failed_read_option) 
+         if (! ignore_failed_read_option && exit_status == TAREXIT_SUCCESS) 
            exit_status = TAREXIT_DIFFERS;
          pad_archive (size_left - (bufsize - count));
          return dump_status_short;
diff -urp tar-1.22.90.orig/src/incremen.c tar-1.22.90/src/incremen.c
--- tar-1.22.90.orig/src/incremen.c     2009-08-09 07:38:01 +0000
+++ tar-1.22.90/src/incremen.c  2009-08-17 03:12:49 +0000
@@ -709,7 +709,7 @@ scan_directory (char *dir, dev_t device,
   
   if (deref_stat (dereference_option, name_buffer, &stat_data))
     {
-      dir_removed_diag (name_buffer, false, stat_diag);
+      dir_removed_diag (name_buffer, cmdline, stat_diag);
       /* FIXME: used to be
            children = CHANGED_CHILDREN;
         but changed to: */
@@ -760,7 +760,7 @@ scan_directory (char *dir, dev_t device,
            {
              if (deref_stat (dereference_option, name_buffer, &stat_data))
                {
-                 stat_diag (name_buffer);
+                 file_removed_diag (name_buffer, false, stat_diag);
                  *entry = 'N';
                  continue;
                }

Reply via email to