Fix removing empty directories

Reported by Thomas Moschny <thomas.moschny@gmx.de>:
src/patch.c (main): Temporary output files are created in the same directory as
the output file.  Make sure to remove them before removing empty files and
their empty ancestor directories; else the directories won't be empty.
tests/remove-directories: Add directory removal test case.
tests/Makefile.am (TESTS): Add new test case.
This commit is contained in:
Andreas Gruenbacher 2013-03-10 19:02:54 +01:00
parent 082baa326a
commit 2f40ef66be
3 changed files with 31 additions and 1 deletions

View File

@ -646,8 +646,8 @@ main (int argc, char **argv)
if (outstate.ofp && (ferror (outstate.ofp) || fclose (outstate.ofp) != 0))
write_fatal ();
output_files (NULL);
delete_files ();
cleanup ();
delete_files ();
if (somefailed)
exit (1);
return 0;

View File

@ -50,6 +50,7 @@ TESTS = \
reject-format \
remember-backup-files \
remember-reject-files \
remove-directories \
symlinks \
unmodified-files

29
tests/remove-directories Normal file
View File

@ -0,0 +1,29 @@
# Copyright (C) 2013 Free Software Foundation, Inc.
#
# Copying and distribution of this file, with or without modification,
# in any medium, are permitted without royalty provided the copyright
# notice and this notice are preserved.
. $srcdir/test-lib.sh
require_cat
use_local_patch
use_tmpdir
# ==============================================================
# Remove empty parent diectories when removing a file
mkdir dir
echo foobar > dir/file
cat > apatch <<EOF
--- dir/file
+++ /dev/null
@@ -1 +0,0 @@
-foobar
EOF
check 'patch -p0 -E < apatch' <<EOF
patching file dir/file
EOF
ncheck '! test -e dir'