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;
}