[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