On Sunday 14 February 2010 04:14:01 Junio C Hamano wrote: > Later, we might want to split the codepath again to: > > (0) see if it is huge or small if we are not reading from pipe; > > (1) if we do not know the size or if it is moderately tiny, keep doing > what your code does; > > (2) if we know we are reading something huge with known size, then have a > loop to read-a-bit-compress-and-write-it-out-while-hashing, and > finally rename the loose resulting object to the final name. Or we > may even want to do that into a new pack on its own. There's a slight problem with that code (I tried to finish last night's attempt but got stuck on this): The create_tmpfile() and move_temp_to_file() duo goes to some lengths to ensure that the file is created in the same directory that we want it to end up in. However, in the block-based scheme, you cannot know which directory this will be before you have already written the entire output. So again I guess there are a few possible solutions: * Try the cross-directory rename anyway, but if it doesn't work, copy&unlink. This of course means that you may write the same object over network twice. * Declare that keeping the memory usage near what it is today (the full output buffer plus a constant) is okay. * Give up and stick with Dmitry's patch :-) -- Thomas Rast trast@{inf,student}.ethz.ch -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html