On 5/26/07, Junio C Hamano <junkio@cox.net> wrote:No problem. When the code decides that a blob should not be written to the output file, then I must make sure it is not used as a delta base. A large blob that triggered the size test and _was_ a delta base could be the result of maxblobsize decreasing or being newly specified, both without -f/--no-object-reuse, and we need to tolerate the user forgetting the option. To make sure that it is not so used, I re-use the trick from maxpacksize which ensures that a delta base is not in the previous split pack: I set the offset field to -1. Unfortunately, I only checked for this magic value when computing usable_delta if pack_size_limit was set. It turns out the test doesn't need to be conditional on pack_size_limit, it works for all cases; so since I need to do the test when maxblobsize was specified and maxpacksize wasn't, I deleted the pack_size_limit test. Now for the second hunk. The facts above mean we could have marked this entry as a re-used delta, but we are unable to re-use the delta because its delta base is not being written to this pack. So we fall into the !to_reuse case even though the size field in the object_entry is the size of the delta, not the object. We can detect this by the type coming from read_sha1_file being unequal to the type set from the pack (which is one of OBJ_{REF,OFS}_DELTA). So I disable the size matching test in this case. Recently Nicolas Pitre improved the code as follows: (1) tree-walking etc. which calls add_object_entry. We learn sha1, type, name(path), pack&offset, no_try_delta during this step. (2) NEW: sort a table of pointers to these objects by pack_offset. (3) Now call check_object on each object, but in the order determined in (2). We learn each object's size during this step. This requires us to inspect each object's header in the pack(s). The result is that we smoothly scan through the pack(s), instead of jumping all over the place. If I move sha1_object_info earlier, before (2), then I undo his optimization. This fact ultimately justifies the first two hunks that you commented on, since it means we want the objects to appear in the object list _before_ we can decide not to write them, and thus we need to handle objects not written and all their consequences (which didn't seem too strange to me, since you already have preferred bases). Thanks, -- Dana L. How danahow@gmail.com +1 650 804 5991 cell - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Renato S. Yamane | Error -71 on device descriptor read/all |
| David Miller | Slow DOWN, please!!! |
| David Woodhouse | [GIT *] Allow request_firmware() to be satisfied from in-kernel, use it in more dr... |
| Kenny Chang | Multicast packet loss |
| Frans Pop | svc: failed to register lockdv1 RPC service (errno 97). |
| Kok, Auke | Re: [PATCH] Add eeprom_bad_csum_allow module option to e1000. |
| David Miller | Re: [GIT]: Networking |
git: | |
