diff options
author | Allan McRae <allan@archlinux.org> | 2012-07-08 13:36:36 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-07-10 15:29:37 +0200 |
commit | 717fdb8ee0fd23cf72fc7d2832317f513caefa2c (patch) | |
tree | 4a3b8dbeda142e77e871df3fcbf74a1f06b58df9 /test | |
parent | d6f31dc78852939f7f83648529887caca2ac9294 (diff) | |
download | pacman-717fdb8ee0fd23cf72fc7d2832317f513caefa2c.tar.gz pacman-717fdb8ee0fd23cf72fc7d2832317f513caefa2c.tar.xz |
Add conflict for replacing owned empty directory
When two packages own an empty directory, pacman finds no conflict when
one of those packages wants to replace the directory with a file or a
symlink. When it comes to actually extracting the new file/symlink,
pacman sees the directory is still there (we do not remove empty
directories if they are owned by a package) and refuses to extract.
Detect this potential conflict early and bail. Note that it is a
_potential_ conflict and not a guaranteed one as the other package owning
the directory could be updated or removed first which would remove
the conflict. However, pacman currently can not sort package installation
order to ensure this, so this conflict requires manual upgrade ordering.
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/pacman/tests/fileconflict009.py | 20 | ||||
-rw-r--r-- | test/pacman/tests/fileconflict010.py | 20 |
2 files changed, 40 insertions, 0 deletions
diff --git a/test/pacman/tests/fileconflict009.py b/test/pacman/tests/fileconflict009.py new file mode 100644 index 00000000..904af4a3 --- /dev/null +++ b/test/pacman/tests/fileconflict009.py @@ -0,0 +1,20 @@ +self.description = "dir->symlink change during package upgrade (directory conflict)" + +lp1 = pmpkg("pkg1") +lp1.files = ["dir/"] +self.addpkg2db("local", lp1) + +lp2 = pmpkg("pkg2") +lp2.files = ["dir/"] +self.addpkg2db("local", lp2) + +p = pmpkg("pkg1", "1.0-2") +p.files = ["dir -> /usr/dir"] +self.addpkg2db("sync", p) + +self.args = "-S pkg1" + +self.addrule("PACMAN_RETCODE=1") +self.addrule("PKG_VERSION=pkg1|1.0-1") +self.addrule("PKG_VERSION=pkg2|1.0-1") +self.addrule("DIR_EXIST=dir/") diff --git a/test/pacman/tests/fileconflict010.py b/test/pacman/tests/fileconflict010.py new file mode 100644 index 00000000..0a3ce835 --- /dev/null +++ b/test/pacman/tests/fileconflict010.py @@ -0,0 +1,20 @@ +self.description = "dir->file change during package upgrade (directory conflict)" + +lp1 = pmpkg("pkg1") +lp1.files = ["dir/"] +self.addpkg2db("local", lp1) + +lp2 = pmpkg("pkg2") +lp2.files = ["dir/"] +self.addpkg2db("local", lp2) + +p = pmpkg("pkg1", "1.0-2") +p.files = ["dir"] +self.addpkg2db("sync", p) + +self.args = "-S pkg1" + +self.addrule("PACMAN_RETCODE=1") +self.addrule("PKG_VERSION=pkg1|1.0-1") +self.addrule("PKG_VERSION=pkg2|1.0-1") +self.addrule("DIR_EXIST=dir/") |