$ mkdir dir

$ echo 1 > dir/foo.orig
$ echo 2 > dir/foo
$ diff -u dir/foo.orig dir/foo > foo.diff
$ diff -u dir/foo.orig dir/foo > revert.diff
$ diff -u dir/foo.orig dir/foo > again.diff
$ mv dir/foo.orig dir/foo
$ tar cf - dir | gzip > dir.tar.gz
$ mkdir dir/patches
$ echo crap > dir/patches/foo.diff
$ tar cf - dir | gzip > dir_with_patches.tar.gz
$ rm -rf dir

$ cat > series
< # Source: dir.tar.gz
< # Patchdir: dir
< #
< foo.diff -p1
< revert.diff -p1 -R
< again.diff
$ quilt setup series
> Unpacking archive dir.tar.gz
$ cd dir
$ ls -l patches series | sed -e 's:.* -> ::'
> ..
> ../series
$ quilt push -qa
> Applying patch %{P}foo.diff
> Applying patch %{P}revert.diff
> Applying patch %{P}again.diff
> Now at patch %{P}again.diff
$ cd ..
$ rm -rf dir

# Quilt setup should happily ignore patches and .pc directories
$ mkdir .pc patches
$ quilt setup series
> Unpacking archive dir.tar.gz
$ rm -rf dir .pc patches

$ quilt setup -d other series
> Unpacking archive dir.tar.gz
$ cd other/dir
$ ls -l patches series | sed -e 's:.* -> ::'
> ../..
> ../../series
$ quilt push -qa
> Applying patch %{P}foo.diff
> Applying patch %{P}revert.diff
> Applying patch %{P}again.diff
> Now at patch %{P}again.diff
$ cd ../..
$ rm -rf other
$ mkdir dir1
$ mv series dir1
$ cd dir1
$ quilt setup -d ../other series
> File dir.tar.gz not found
$ quilt setup --sourcedir .. -d ../other series
> Unpacking archive ../dir.tar.gz
$ cd ../other/dir
$ ls -l patches series | sed -e 's:.* -> ::'
> ../..
> ../../dir1/series
$ quilt push -qa
> Applying patch %{P}foo.diff
> Applying patch %{P}revert.diff
> Applying patch %{P}again.diff
> Now at patch %{P}again.diff
$ cd ../..
$ rm -rf "dir"

# 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
> Trying alternative patches and series names...
$ cd dir
$ ls -l quilt_patches quilt_series | sed -e 's:.* -> ::'
> ..
> ../series_with_patches
$ quilt push -qa
>~ Applying patch (quilt_patches/)?foo.diff
>~ Now at patch (quilt_patches/)?foo.diff
$ cd ..
$ rm -rf "dir"

# Now a basic test with space in dir name
$ mkdir "space [dir]"
$ echo 1 > "space [dir]/foo.orig"
$ echo 2 > "space [dir]/foo"
# Recent versions of GNU diff will quote such file names, but old versions
# of GNU patch do not support that, so strip the quotes
$ diff -u "space [dir]/foo.orig" "space [dir]/foo" | sed -e 's:"::g' > foo.diff
$ cp foo.diff revert.diff
$ cp foo.diff again.diff
$ mv "space [dir]/foo.orig" "space [dir]/foo"
$ tar cf - "space [dir]" | gzip > "space [dir].tar.gz"
$ rm -rf "space [dir]"
$ cat > series
< # Source: space [dir].tar.gz
< # Patchdir: space [dir]
< #
< foo.diff -p1
< revert.diff -p1 -R
< again.diff
$ quilt setup series
> Unpacking archive space [dir].tar.gz
$ cd space\ [dir]
$ ls -l patches series | sed -e 's:.* -> ::'
> ..
> ../series
$ quilt push -qa
> Applying patch %{P}foo.diff
> Applying patch %{P}revert.diff
> Applying patch %{P}again.diff
> Now at patch %{P}again.diff
$ cd ..
$ rm -rf "space [dir]"
