aboutsummaryrefslogtreecommitdiff
path: root/pack-objects.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-27 19:31:46 -0700
committerJunio C Hamano <junkio@cox.net>2006-04-27 19:31:46 -0700
commit9a8b6a0a9d4de3d9c1005b872b9b57a213d3e9f8 (patch)
tree6e34f845941322b6fade53d1f121db31bd5c929e /pack-objects.c
parentbd346f105dc6f343eb577e4b25dbc1fa098cff33 (diff)
downloadgit-9a8b6a0a9d4de3d9c1005b872b9b57a213d3e9f8.tar.gz
git-9a8b6a0a9d4de3d9c1005b872b9b57a213d3e9f8.tar.xz
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>
Diffstat (limited to 'pack-objects.c')
-rw-r--r--pack-objects.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/pack-objects.c b/pack-objects.c
index c0acc460b..660433813 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -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);