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