"Shawn O. Pearce" <spearce@xxxxxxxxxxx> writes: > No logic change should be occuring here, with the exception that > some comparsions will now work properly when the number of objects > exceeds 2**31-1. > ... > static void find_deltas(struct object_entry **list, int window, int depth) > { > - int i, idx; > + uint32_t i = nr_objects, idx = 0, processed = 0; > unsigned int array_size = window * sizeof(struct unpacked); > - struct unpacked *array = xmalloc(array_size); > - unsigned processed = 0; > + struct unpacked *array; > unsigned last_percent = 999; > > + if (!nr_objects) > + return; > + array = xmalloc(array_size); > memset(array, 0, array_size); > - i = nr_objects; > - idx = 0; > if (progress) > - fprintf(stderr, "Deltifying %d objects.\n", nr_result); > + fprintf(stderr, "Deltifying %u objects.\n", nr_result); > > - while (--i >= 0) { > - struct object_entry *entry = list[i]; > + do { > + struct object_entry *entry = list[--i]; > struct unpacked *n = array + idx; > int j; > ... > @@ -1345,7 +1342,7 @@ static void find_deltas(struct object_entry **list, int window, int depth) > idx++; > if (idx >= window) > idx = 0; > - } > + } while (i > 0); I may not be reading the patch correctly, but doesn't this make find_deltas() logic to scan the list backwards? We sort the list by type and size before we enter this, so that we scan from bigger to smaller, because we prefer to leave biggest as a base and represent smaller ones as deltas (removing deltas do not have to record preimage and tend to be much smaller than adding deltas). I suspect this change may affect that optimization. - 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