[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