2005-04-19 02:39:48 +08:00
|
|
|
#include "cache.h"
|
2006-01-07 17:33:54 +08:00
|
|
|
#include "blob.h"
|
2005-04-19 02:39:48 +08:00
|
|
|
|
|
|
|
const char *blob_type = "blob";
|
|
|
|
|
2005-06-03 23:05:39 +08:00
|
|
|
struct blob *lookup_blob(const unsigned char *sha1)
|
2005-04-19 02:39:48 +08:00
|
|
|
{
|
|
|
|
struct object *obj = lookup_object(sha1);
|
2007-04-17 13:11:43 +08:00
|
|
|
if (!obj)
|
2014-07-13 14:41:55 +08:00
|
|
|
return create_object(sha1, alloc_blob_node());
|
add object_as_type helper for casting objects
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>
2014-07-13 14:42:03 +08:00
|
|
|
return object_as_type(obj, OBJ_BLOB, 0);
|
2005-04-19 02:39:48 +08:00
|
|
|
}
|
2005-04-28 22:46:33 +08:00
|
|
|
|
2005-05-07 01:48:34 +08:00
|
|
|
int parse_blob_buffer(struct blob *item, void *buffer, unsigned long size)
|
|
|
|
{
|
|
|
|
item->object.parsed = 1;
|
|
|
|
return 0;
|
|
|
|
}
|