Revision c4ad00f8ccb59a0ae0735e8e32b203d4bd835616 authored by Jeff King on 13 July 2014, 06:42:03 UTC, committed by Junio C Hamano on 28 July 2014, 17:14:33 UTC
When we call lookup_commit, lookup_tree, etc, the logic goes something like: 1. Look for an existing object struct. If we don't have one, allocate and return a new one. 2. Double check that any object we have is the expected type (and complain and return NULL otherwise). 3. Convert an object with type OBJ_NONE (from a prior call to lookup_unknown_object) to the expected type. We can encapsulate steps 2 and 3 in a helper function which checks whether we have the expected object type, converts OBJ_NONE as appropriate, and returns the object. Not only does this shorten the code, but it also provides one central location for converting OBJ_NONE objects into objects of other types. Future patches will use that to enforce type-specific invariants. Since this is a refactoring, we would want it to behave exactly as the current code. It takes a little reasoning to see that this is the case: - for lookup_{commit,tree,etc} functions, we are just pulling steps 2 and 3 into a function that does the same thing. - for the call in peel_object, we currently only do step 3 (but we want to consolidate it with the others, as mentioned above). However, step 2 is a noop here, as the surrounding conditional makes sure we have OBJ_NONE (which we want to keep to avoid an extraneous call to sha1_object_info). - for the call in lookup_commit_reference_gently, we are currently doing step 2 but not step 3. However, step 3 is a noop here. The object we got will have just come from deref_tag, which must have figured out the type for each object in order to know when to stop peeling. Therefore the type will never be OBJ_NONE. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent fe0444b
File | Mode | Size |
---|---|---|
LICENSE | -rw-r--r-- | 1.5 KB |
fast_export.c | -rw-r--r-- | 8.9 KB |
fast_export.h | -rw-r--r-- | 1.2 KB |
line_buffer.c | -rw-r--r-- | 2.8 KB |
line_buffer.h | -rw-r--r-- | 980 bytes |
line_buffer.txt | -rw-r--r-- | 2.4 KB |
repo_tree.c | -rw-r--r-- | 1.0 KB |
repo_tree.h | -rw-r--r-- | 692 bytes |
sliding_window.c | -rw-r--r-- | 2.1 KB |
sliding_window.h | -rw-r--r-- | 376 bytes |
svndiff.c | -rw-r--r-- | 8.0 KB |
svndiff.h | -rw-r--r-- | 210 bytes |
svndump.c | -rw-r--r-- | 13.4 KB |
svndump.h | -rw-r--r-- | 267 bytes |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...