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
History
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

back to top