mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
pack-objects: update size heuristucs.
We used to omit delta base candidates that is much bigger than the target, but delta size does not grow when we delete more, so that was not a very good heuristics. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
bd346f105d
commit
9a8b6a0a9d
|
@ -1032,12 +1032,6 @@ static int try_delta(struct unpacked *cur, struct unpacked *old, unsigned max_de
|
|||
max_depth -= cur_entry->delta_limit;
|
||||
}
|
||||
|
||||
size = cur_entry->size;
|
||||
oldsize = old_entry->size;
|
||||
sizediff = oldsize > size ? oldsize - size : size - oldsize;
|
||||
|
||||
if (size < 50)
|
||||
return -1;
|
||||
if (old_entry->depth >= max_depth)
|
||||
return 0;
|
||||
|
||||
|
@ -1048,9 +1042,12 @@ static int try_delta(struct unpacked *cur, struct unpacked *old, unsigned max_de
|
|||
* more space-efficient (deletes don't have to say _what_ they
|
||||
* delete).
|
||||
*/
|
||||
size = cur_entry->size;
|
||||
max_size = size / 2 - 20;
|
||||
if (cur_entry->delta)
|
||||
max_size = cur_entry->delta_size-1;
|
||||
oldsize = old_entry->size;
|
||||
sizediff = oldsize < size ? size - oldsize : 0;
|
||||
if (sizediff >= max_size)
|
||||
return 0;
|
||||
delta_buf = diff_delta(old->data, oldsize,
|
||||
|
@ -1109,6 +1106,9 @@ static void find_deltas(struct object_entry **list, int window, int depth)
|
|||
*/
|
||||
continue;
|
||||
|
||||
if (entry->size < 50)
|
||||
continue;
|
||||
|
||||
free(n->data);
|
||||
n->entry = entry;
|
||||
n->data = read_sha1_file(entry->sha1, type, &size);
|
||||
|
|
Loading…
Reference in a new issue