Aaron Griffin wrote:
On 7/11/07, Xavier <shiningxc@gmail.com> wrote:
On Wed, Jul 11, 2007 at 09:53:49PM +0100, Andrew Fyfe wrote:
But back to the point, I think we need a temporary directory (mkdtemp(/tmp/XXXXXXX)) where we put install and changelog before we commit a package to the database. Looking at this from the point of view of a normal db I would never enter the install file before I've actual created a valid entry for the package (the desc file).
Initially, I wanted to try avoiding extracting stuff to /tmp/ , influenced by the following comment in package.c : 544 /* TODO there is no reason to make temp files to read 545 * from a libarchive archive, it can be done by reading 546 * directly from the archive 547 * See: archive_read_data_into_buffer 548 * requires changes 'parse_descfile' as well 549 * */
But since these files are used again later, I think I would prefer what you just said, keeping files like install and changelog somewhere in /tmp/ , and then moving them only when the entry is created. I agree totally :)
The comment above is not taking into account that it's done multiple times. I think extracting to a temp dir might be subtly problematic, but may open up more opportunities for us later.
For instance, if we extract to /tmp/foo/ first, we get the benefit of not having to run entirely through the archive twice to check tarball integrity. In addition, it allows us to stay slightly more transactional in the sense that we can extract to /tmp, do all the fs-to-fs comparisons and then simply dump the temp extraction to the root dir.
Actually, this could (hah) clean up some of the directory-symlink issues too.
Just some food for thought.
_______________________________________________ pacman-dev mailing list pacman-dev@archlinux.org http://archlinux.org/mailman/listinfo/pacman-dev
My original idea for the temp dir was to only use it for the meta data files. But thinking about it extracting the whole package to a tmp dir means we wouldn't need to extend .FILELIST (pacman could generate a more detailed filelist at install time). If I remember correctly this is how dpkg installs a package, it 1st extracts the package to a temp dir, checks conflicts, then copies the new files into place. I've started writing do a detailed list/description of how pacman should install a package, I'll try and get it finished this weekend and post it here. Andrew