Commits


fix off_t type mismatches off_t is a signed type and depending on the platform, it can be "long" or "long long", so cast to long long for printf(). ok stsp


use random seeds for murmurhash2 change the three hardcoded seeds to fresh ones generated on demand via arc4random. Suggested/fixed by and ok stsp@


const-ify tables ok thomas_adam millert


consistently match size of hash variables to that returned by murmurhash ok millert stsp


use murmurhash instead of sha1 for deltification blocks; suggested by ori


map raw object files into memory while packing if possible


fix wrong function in error string of emitdelta()


link to the FastCDC paper from deltify.c; suggested by Ori some time ago


make the number of elements in deltify's geartab explicit


fix seek to incorrect offset in the delta base when creating deltas The stretchblk() function needs to compare data located after the block which has just been matched. However, upon entry it was resetting the file pointer of the delta base to the beginning(!) of the block. The other file is correctly positioned after the block. In many cases the data won't match and stretchblk() will not stretch the matched block. But when the data did happen to match this resulted in a bogus delta, and wrong file contents when the delta was applied. Fix this by setting the delta base file pointer to end of the block. Problem reported by naddy after our server refused a pack file which was sent by 'got send'. I could reproduce the issue by running the 'gotadmin pack' command on a copy of naddy's repository. ok naddy


plug a memory leak in an error path of got_deltify()


make got_deltify() rellocate the deltas array less often


fix deltas with trailing data that is smaller than the minimum chunk size


allow the delta base file to lose its header between deltify_init and deltify This simplifies pack file creation. A delta base could be read from a loose object, a packfile, or it might be available in a temporary file. All these cases can now be handled the same way. We may need to open, close, and re-open a given delta base multiple times while packing.


check for errors from emitdelta() in got_deltify()