3% tighter packs for free
This patch makes for 3.4% smaller pack with the git repository, and a bit more than 3% smaller pack with the kernel repository. And so with _no_ measurable CPU difference. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
71bb10336f
commit
5a1fb2ca92
17
diff-delta.c
17
diff-delta.c
@ -136,7 +136,8 @@ void *diff_delta(void *from_buf, unsigned long from_size,
|
|||||||
unsigned long *delta_size,
|
unsigned long *delta_size,
|
||||||
unsigned long max_size)
|
unsigned long max_size)
|
||||||
{
|
{
|
||||||
unsigned int i, outpos, outsize, inscnt, hash_shift;
|
unsigned int i, outpos, outsize, hash_shift;
|
||||||
|
int inscnt;
|
||||||
const unsigned char *ref_data, *ref_top, *data, *top;
|
const unsigned char *ref_data, *ref_top, *data, *top;
|
||||||
unsigned char *out;
|
unsigned char *out;
|
||||||
struct index *entry, **hash;
|
struct index *entry, **hash;
|
||||||
@ -222,6 +223,20 @@ void *diff_delta(void *from_buf, unsigned long from_size,
|
|||||||
unsigned char *op;
|
unsigned char *op;
|
||||||
|
|
||||||
if (inscnt) {
|
if (inscnt) {
|
||||||
|
while (moff && ref_data[moff-1] == data[-1]) {
|
||||||
|
if (msize == 0x10000)
|
||||||
|
break;
|
||||||
|
/* we can match one byte back */
|
||||||
|
msize++;
|
||||||
|
moff--;
|
||||||
|
data--;
|
||||||
|
outpos--;
|
||||||
|
if (--inscnt)
|
||||||
|
continue;
|
||||||
|
outpos--; /* remove count slot */
|
||||||
|
inscnt--; /* make it -1 */
|
||||||
|
break;
|
||||||
|
}
|
||||||
out[outpos - inscnt - 1] = inscnt;
|
out[outpos - inscnt - 1] = inscnt;
|
||||||
inscnt = 0;
|
inscnt = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user