[pacman-dev] difficult symlink "puzzle"
ngaba at petra.hos.u-szeged.hu
ngaba at petra.hos.u-szeged.hu
Tue Jul 3 08:58:35 EDT 2007
Hi!
IMHO this problem is more general and serious, and this should be
solved. Either you specify some strict Arch packaging standards to
avoid this bug or you improve pacman. I prefer the 2nd, and that is not
easy; I make some suggestions here to discuss:
First I define the goal: the content of foo's .FILELIST exists on
filesystem iff foo is installed.
OK, I assume that the goal above holds for all installed package; we
just need to keep this during package install/removal.
Install:
-If we install /dir/file: That exists until package foo is removed (in
normal case). If dir is a symlink, we MUST record the "real"
destination of file to localdb/foo/files too, because the dir symlink
can be removed/modified during an other package removal (or update!!:
you can easily imagine a modified perl example where current is a
symlink to the latest version...) or by the user.
-If we install /dir/dir_symlink: First, we treat dir2 as a regular
file, and do the steps above. Then we check if /dir1/dir2 exists. If
no, we simply create it pointing to the requested dir. If yes and that
is not a real dir, we can stop with file conflict. If yes and
dir_symlink is a real dir, we can move its content to the
dir_symlink-pointed dir, then delete/create_link dir_symlink; we must
also record the file movements to the localdb as above (this is slow,
queryfileowner needed, but this a rare case).
Remove:
-If we remove /dir/file: no extra work needed, just we need to use
"real" path.
-If we remove /dir/dir_sl: If dir_sl_pointed is empty or doesn't exist,
then simply remove dir_sl. If dir_sl_pointed is not empty then we must
create a real dir named dir_sl, and moved some files (we scan localdb
for files need to be installed as /dir/dir_sl/file) from dir_sl_pointed
to there (and record the movements to localdb again.).
Bye, ngaba
PS: We can implement these without db conversion (and keep compatibility).
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
More information about the pacman-dev
mailing list