On Mon, 18 Feb 2013 13:47:54 +1000 Allan McRae <[email protected]> wrote:
> On 18/02/13 12:52, Andrew Gregory wrote: > > Having reviewed the related code far more than I never wanted to, I > > believe I can get the number of resolved paths down to a manageable > > level while keeping full symlink support. We should be able to take > > advantage of the fact that symlinks in paths are not the norm and file > > basename collisions are actually quite rare to selectively resolve > > individual paths as necessary instead of resolving whole filelists. I > > haven't worked out all of the specifics for doing this efficiently, > > though, so it may not be worth it in the end. > > It would be great if the amount of resolving could be reduced greatly. > But what is a real use case for this feature? > I was mostly just concerned about not removing functionality if we don't really need to. If there's really no need for it, I'm fine with dropping it. > > If we do remove support, we should probably at least still use resolved > > paths to check for inter-target conflicts. If one target has a symlink > > in its paths I don't see any other way to catch a conflict prior to > > actually extracting the files. As long as we only resolve files that > > are new in the package and packages don't constantly move files around, > > this should have only a small performance hit most of the time. > > I don't understand this. > > A package can not have a symlink to a directory and files in the > directory too. E.g. a package can not have /lib -> usr/lib and /lib/foo. > So there is no need to resolve there. > > Or, a symlink one package and a directory is in the other would generate > a conflict (as happens currently). What would change is that we > currently allow these to be installed in separate transactions (symlink > containing package first). Sorry, I meant that one of the packages has a directory that exists on the filesystem as a symlink, for example: filesystem: /lib -> /usr/lib pkg1: /lib/foo pkg2: /usr/lib/foo Without resolving /lib/foo we wouldn't be able to detect the conflict until we started committing the transaction and actually tried to extract the files.
