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.