diff options
author | Andreas Gruenbacher <agruen@linbit.com> | 2013-03-10 19:02:54 +0100 |
---|---|---|
committer | Andreas Gruenbacher <agruen@linbit.com> | 2013-03-10 19:02:54 +0100 |
commit | 2f40ef66bea54be23a24f616cde021d8d7fc25be (patch) | |
tree | c62250b5b6e270f77e50273c10ddbfaadb61c1fc | |
parent | 082baa326a75d0969e3100ecea84b2345e9d96b9 (diff) | |
download | patch-2f40ef66bea54be23a24f616cde021d8d7fc25be.tar.gz |
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.
-rw-r--r-- | src/patch.c | 2 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/remove-directories | 29 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/patch.c b/src/patch.c index 0255fbb..010c14a 100644 --- a/src/patch.c +++ b/src/patch.c @@ -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; diff --git a/tests/Makefile.am b/tests/Makefile.am index 5cea52d..cfc4f37 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -50,6 +50,7 @@ TESTS = \ reject-format \ remember-backup-files \ remember-reject-files \ + remove-directories \ symlinks \ unmodified-files diff --git a/tests/remove-directories b/tests/remove-directories new file mode 100644 index 0000000..6acdc49 --- /dev/null +++ b/tests/remove-directories @@ -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' |