Browse Source

Minor fixes

Sergey Poznyakoff 15 years ago
parent
commit
acd833fb98
3 changed files with 25 additions and 8 deletions
  1. 1 1
      NEWS
  2. 7 3
      src/misc.c
  3. 17 4
      tests/filerem01.at

+ 1 - 1
NEWS

@@ -39,7 +39,7 @@ was explicitly listed in the command line, or was gathered
 during file system scan.
 during file system scan.
 
 
 If the file was explicitly listed in the command line, tar
 If the file was explicitly listed in the command line, tar
-issues error messages and exits with the code 2, meaning
+issues error message and exits with the code 2, meaning
 fatal error.
 fatal error.
 
 
 Otherwise, if the file was gathered during the file system
 Otherwise, if the file was gathered during the file system

+ 7 - 3
src/misc.c

@@ -762,9 +762,13 @@ dir_removed_diag (const char *name, bool top_level,
 		   void (*diagfn) (char const *name))
 		   void (*diagfn) (char const *name))
 {
 {
   if (!top_level && errno == ENOENT)
   if (!top_level && errno == ENOENT)
-    WARNOPT (WARN_FILE_REMOVED,
-	     (0, 0, _("%s: Directory removed before we read it"),
-	      quotearg_colon (name)));
+    {
+      WARNOPT (WARN_FILE_REMOVED,
+	       (0, 0, _("%s: Directory removed before we read it"),
+		quotearg_colon (name)));
+      if (exit_status == TAREXIT_SUCCESS)
+	exit_status = TAREXIT_DIFFERS;
+    }
   else
   else
     diagfn (name);
     diagfn (name);
 }
 }

+ 17 - 4
tests/filerem01.at

@@ -14,9 +14,22 @@
 # GNU General Public License for more details.
 # GNU General Public License for more details.
 
 
 # You should have received a copy of the GNU General Public License
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Description: when a file in a deep directory disappeared during creation
+# of incremental dump, tar v. <1.23 would exit with TAREXIT_FAILURE (2).
+# However, such events are quite common and don't necessarily constitute
+# an error.  Exiting with code 2 in such cases makes it impossible to
+# distinguish serious errors from benign ones.
+#
+# Starting from tar 1.22.90, tar exits with TAREXIT_DIFFERS (1)
+# instead.
+#
+# Reported by: Solar Designer <[email protected]>
+# 
+# References: <[email protected]>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-03/msg00000.html
+#
 
 
 AT_SETUP([file removed as we read it (ca. 22 seconds)])
 AT_SETUP([file removed as we read it (ca. 22 seconds)])
 AT_KEYWORDS([create incremental filechange filerem filerem01])
 AT_KEYWORDS([create incremental filechange filerem filerem01])
@@ -32,7 +45,7 @@ genfile --run --checkpoint=3 --unlink dir/file1 -- \
        --checkpoint-action='echo' -c -f archive.tar \
        --checkpoint-action='echo' -c -f archive.tar \
        --listed-incremental db -v dir >/dev/null
        --listed-incremental db -v dir >/dev/null
 ],
 ],
-[0],
+[1],
 [ignore],
 [ignore],
 [tar: dir: Directory is new
 [tar: dir: Directory is new
 tar: dir/sub: Directory is new
 tar: dir/sub: Directory is new