66 lines
1.4 KiB
Diff
66 lines
1.4 KiB
Diff
|
Check for existing directories before unpacking.
|
||
|
---
|
||
|
quilt/setup.in | 22 ++++++++++++++++++++++
|
||
|
test/setup.test | 7 ++++++-
|
||
|
2 files changed, 28 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/quilt/setup.in
|
||
|
+++ b/quilt/setup.in
|
||
|
@@ -22,6 +22,25 @@ then
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
+check_for_existing_directories() {
|
||
|
+ local tag dir last_dir arg status=0
|
||
|
+
|
||
|
+ while read tag dir arg
|
||
|
+ do
|
||
|
+ [ "$dir" != "." -a "$dir" != "$last_dir" ] || continue
|
||
|
+
|
||
|
+ if [ -e "$prefix$dir" ]
|
||
|
+ then
|
||
|
+ printf $"Directory %s exists\n" \
|
||
|
+ "$prefix$dir" >&2
|
||
|
+ status=1
|
||
|
+ fi
|
||
|
+ last_dir=$dir
|
||
|
+ done < $tmpfile
|
||
|
+
|
||
|
+ return $status
|
||
|
+}
|
||
|
+
|
||
|
check_for_existing_files() {
|
||
|
local tag dir last_dir arg status=0
|
||
|
|
||
|
@@ -196,6 +215,9 @@ case "$1" in
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
+# Make sure that unpacking will not overwrite anything
|
||
|
+check_for_existing_directories || exit 1
|
||
|
+
|
||
|
while read tag dir arg1 arg2
|
||
|
do
|
||
|
case "$tag" in
|
||
|
--- a/test/setup.test
|
||
|
+++ b/test/setup.test
|
||
|
@@ -64,12 +64,17 @@ $ quilt push -qa
|
||
|
$ cd ../..
|
||
|
$ rm -rf "dir"
|
||
|
|
||
|
-# Now test the case where the tarball contains a patches directory
|
||
|
+# Now test the cases where the directory already exists, or the tarball
|
||
|
+# contains a patches directory
|
||
|
$ cat > series_with_patches
|
||
|
< # Source: dir_with_patches.tar.gz
|
||
|
< # Patchdir: dir
|
||
|
< #
|
||
|
< foo.diff
|
||
|
+$ mkdir dir
|
||
|
+$ quilt setup series_with_patches
|
||
|
+> Directory dir exists
|
||
|
+$ rmdir dir
|
||
|
$ quilt setup series_with_patches
|
||
|
> Unpacking archive dir_with_patches.tar.gz
|
||
|
> Directory dir/patches exists
|