X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fincremen.c;fp=src%2Fincremen.c;h=d5bc1e41d88fa6c0d8067da6d27a62f6a60e3774;hb=643a8844a578ff146cfe746fe6091d29502b6c40;hp=04b946f62bdc07f65cc3f48210978b59551b57c8;hpb=099f71f78da3ef9a1aa525f070d93c87ed06cb98;p=chaz%2Ftar diff --git a/src/incremen.c b/src/incremen.c index 04b946f..d5bc1e4 100644 --- a/src/incremen.c +++ b/src/incremen.c @@ -446,7 +446,8 @@ procdir (const char *name_buffer, struct tar_stat_info *st, struct directory *directory; struct stat *stat_data = &st->stat; bool nfs = NFS_FILE_STAT (*stat_data); - + bool perhaps_renamed = false; + if ((directory = find_directory (name_buffer)) != NULL) { if (DIR_IS_INITED (directory)) @@ -500,9 +501,7 @@ procdir (const char *name_buffer, struct tar_stat_info *st, } else { - WARNOPT (WARN_RENAME_DIRECTORY, - (0, 0, _("%s: Directory has been renamed"), - quotearg_colon (name_buffer))); + perhaps_renamed = true; directory->children = ALL_CHILDREN; directory->device_number = stat_data->st_dev; directory->inode_number = stat_data->st_ino; @@ -560,13 +559,21 @@ procdir (const char *name_buffer, struct tar_stat_info *st, if (one_file_system_option && st->parent && stat_data->st_dev != st->parent->stat.st_dev) - /* FIXME: - WARNOPT (WARN_XDEV, - (0, 0, - _("%s: directory is on a different filesystem; not dumped"), - quotearg_colon (directory->name))); - */ - directory->children = NO_CHILDREN; + { + WARNOPT (WARN_XDEV, + (0, 0, + _("%s: directory is on a different filesystem; not dumped"), + quotearg_colon (directory->name))); + directory->children = NO_CHILDREN; + /* If there is any dumpdir info in that directory, remove it */ + if (directory->dump) + { + dumpdir_free (directory->dump); + directory->dump = NULL; + } + perhaps_renamed = false; + } + else if (flag & PD_FORCE_CHILDREN) { directory->children = PD_CHILDREN(flag); @@ -574,6 +581,11 @@ procdir (const char *name_buffer, struct tar_stat_info *st, *entry = 'N'; } + if (perhaps_renamed) + WARNOPT (WARN_RENAME_DIRECTORY, + (0, 0, _("%s: Directory has been renamed"), + quotearg_colon (name_buffer))); + DIR_SET_FLAG (directory, DIRF_INIT); if (directory->children != NO_CHILDREN)