FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 07-17-2012, 03:59 AM
Allan McRae
 
Default Do not remove symlink to directory if an installed package use it

On 17/07/12 13:53, Allan McRae wrote:
> If a packge has a directory (e.g. /lib -> usr/lib), do not allow

package... directory symlink...

> it to be removed if any other package is trying to install a file
> into that path (e.g. /lib/foo). This is because the local database
> can become invalidated if the symlink is removed after then package

s/then/the/

> with file /lib/foo is installed (sync702.py). If the symlink is
> removed before the file is installed (sync701.py), the upgrade is
> actually a success, but we can not guarantee the ordering so both
> cases should fail.

Typos corrected on my working branch

> Signed-off-by: Allan McRae <allan@archlinux.org>
> ---
> test/pacman/tests/sync701.py | 22 ++++++++++++++++++++++
> test/pacman/tests/sync702.py | 22 ++++++++++++++++++++++
> 2 files changed, 44 insertions(+)
> create mode 100644 test/pacman/tests/sync701.py
> create mode 100644 test/pacman/tests/sync702.py
>
> diff --git a/test/pacman/tests/sync701.py b/test/pacman/tests/sync701.py
> new file mode 100644
> index 0000000..201f602
> --- /dev/null
> +++ b/test/pacman/tests/sync701.py
> @@ -0,0 +1,22 @@
> +self.description = "do not remove directory symlink if incoming package has file in its path (order 1)"
> +
> +lp = pmpkg("pkg1")
> +lp.files = ["usr/lib/foo",
> + "lib -> usr/lib"]
> +self.addpkg2db("local", lp)
> +
> +p1 = pmpkg("pkg1", "1.0-2")
> +p1.files = ["usr/lib/foo"]
> +self.addpkg2db("sync", p1)
> +
> +p2 = pmpkg("pkg2")
> +p2.files = ["lib/bar"]
> +self.addpkg2db("sync", p2)
> +
> +self.args = "-S pkg1 pkg2"
> +
> +self.addrule("PACMAN_RETCODE=1")
> +self.addrule("PKG_VERSION=pkg1|1.0-1")
> +self.addrule("!PKG_EXIST=pkg2")
> +
> +self.expectfailure = True
> diff --git a/test/pacman/tests/sync702.py b/test/pacman/tests/sync702.py
> new file mode 100644
> index 0000000..ee4eef9
> --- /dev/null
> +++ b/test/pacman/tests/sync702.py
> @@ -0,0 +1,22 @@
> +self.description = "do not remove directory symlink if incoming package has file in its path (order 2)"
> +
> +lp = pmpkg("pkg2")
> +lp.files = ["usr/lib/foo",
> + "lib -> usr/lib"]
> +self.addpkg2db("local", lp)
> +
> +p1 = pmpkg("pkg1")
> +p1.files = ["lib/bar"]
> +self.addpkg2db("sync", p1)
> +
> +p2 = pmpkg("pkg2", "1.0-2")
> +p2.files = ["usr/lib/foo"]
> +self.addpkg2db("sync", p2)
> +
> +self.args = "-S pkg1 pkg2"
> +
> +self.addrule("PACMAN_RETCODE=1")
> +self.addrule("PKG_VERSION=pkg2|1.0-1")
> +self.addrule("!PKG_EXIST=pkg1")
> +
> +self.expectfailure = True
>
 

Thread Tools




All times are GMT. The time now is 03:46 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org