|
From: | John Stanley |
Subject: | Re: [Bug-tar] skip-old-files feature request |
Date: | Wed, 07 Nov 2012 07:26:11 -0500 |
User-agent: | Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 |
On 11/07/2012 04:30 AM, Live user
wrote:
Last post was for old (1.26 tree); for 1.26.90:John Stanley wrote:Hi, I was wondering if it would be possible in the 'skip-old-files' option warning messages, to have a distinction made between existing files and existing directories, i.e., instead of, e.g., printing: tar: ./usr/local: skipping existing file print: tar: ./usr/local/: skipping existing directory This would make it much easier to parse existing files and existing directories. I have been using the following simple patch to handle this in my work: +++ tar-master-1.26.90.new/src/extract.c 2012-11-06 18:18:28.853013706 -0500 @@ -644,8 +644,12 @@ maybe_recoverable (char *file_name, bool switch (old_files_option) { case SKIP_OLD_FILES: - WARNOPT (WARN_EXISTING_FILE, - (0, 0, _("%s: skipping existing file"), file_name)); + if (current_stat_info.had_trailing_slash) + WARNOPT (WARN_EXISTING_FILE, + (0, 0, _("%s/: skipping existing directory"), file_name)); + else + WARNOPT (WARN_EXISTING_FILE, + (0, 0, _("%s: skipping existing file"), file_name)); return RECOVER_SKIP; case KEEP_OLD_FILES:Directories don't always have trailing slash in tar archives, so you should check for both the trailing slash or the directory attribute. --- tar-master-1.26.90.old/src/extract.c 2012-07-27 04:32:31.000000000 -0400 +++ tar-master-1.26.90.new/src/extract.c 2012-11-07 07:22:08.293931807 -0500 @@ -644,8 +644,12 @@ maybe_recoverable (char *file_name, bool switch (old_files_option) { case SKIP_OLD_FILES: - WARNOPT (WARN_EXISTING_FILE, - (0, 0, _("%s: skipping existing file"), file_name)); + if (S_ISDIR(current_stat_info.stat.st_mode)) + WARNOPT (WARN_EXISTING_FILE, + (0, 0, _("%s/: skipping existing directory"), file_name)); + else + WARNOPT (WARN_EXISTING_FILE, + (0, 0, _("%s: skipping existing file"), file_name)); return RECOVER_SKIP; case KEEP_OLD_FILES: @@ -1362,6 +1366,7 @@ prepare_to_extract (char const *file_nam case DIRTYPE: case GNUTYPE_DUMPDIR: + current_stat_info.stat.st_mode |= S_IFDIR; *fun = extract_dir; if (current_stat_info.is_dumpdir) delay_directory_restore_option = true; of course, additional type check could be added as well. John |
[Prev in Thread] | Current Thread | [Next in Thread] |