summaryrefslogtreecommitdiff
blob: 00193b7ce531bbea2784187cde61abdf2d4eafd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
From 2f40ef66bea54be23a24f616cde021d8d7fc25be Mon Sep 17 00:00:00 2001
From: Andreas Gruenbacher <agruen@linbit.com>
Date: Sun, 10 Mar 2013 18:02:54 +0000
Subject: 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.
---
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
--- a/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'
--
cgit v0.9.0.2