[pacman-dev] difficult symlink "puzzle"

ngaba at petra.hos.u-szeged.hu ngaba at petra.hos.u-szeged.hu
Wed Jul 4 09:47:11 EDT 2007


Hi!
First, I want to underline again, that the problem is serious, because 
-U = -Rd + -A.

> But well, that really hurts my head badly...

OK, I will try to explain the "programmer friendly" version again;-)
The goal: content of foo package must be exist on the HDD iff foo is 
installed (the filepath can be manipulated using symlinks, that is 
not(?) important: if /path/file exists in filelist, /path/file must 
exist on HDD iff foo is installed; /path can be symlink here.).
My solution(?): We can assume, that the goal above holds before pacman 
is invoked, we just need to keep this situation.
In this simpilified version, there is nothing interesting with regular 
file/dir install, we just "follow" symlinks and extract /path/file as 
/path/file. We just need to be careful during 
dir_symlink(->dir_pointed) install, when dir_symlink exists and it is a 
regular dir (else we create it or stop with file conflict): then we 
simply move the content of dir_symlink to dir_pointed, and replace 
dir_symlink with a symlink (->dir_pointed) [WARNING: more sophisticated 
file conflict checking needed here before the commit!]. You can see, 
that we didn't break our goal: all files in /dir_symlink can be 
accessed in the same way, the same for /dir_pointed.
The removal is similar: Nothing extra with regular file/dir removal. If 
you remove a dir_symlink, you must scan the db for files which must be 
moved to the newly created regular dir named dir_symlink to keep our 
goal.

Bye, ngaba

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.





More information about the pacman-dev mailing list