summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--object.c18
-rw-r--r--object.h3
-rw-r--r--tag.c21
3 files changed, 18 insertions, 24 deletions
diff --git a/object.c b/object.c
index 0e67af3..5b46889 100644
--- a/object.c
+++ b/object.c
@@ -120,24 +120,6 @@ void created_object(const unsigned char *sha1, struct object *obj)
nr_objs++;
}
-struct object *lookup_object_type(const unsigned char *sha1, const char *type)
-{
- if (!type) {
- return lookup_unknown_object(sha1);
- } else if (!strcmp(type, blob_type)) {
- return &lookup_blob(sha1)->object;
- } else if (!strcmp(type, tree_type)) {
- return &lookup_tree(sha1)->object;
- } else if (!strcmp(type, commit_type)) {
- return &lookup_commit(sha1)->object;
- } else if (!strcmp(type, tag_type)) {
- return &lookup_tag(sha1)->object;
- } else {
- error("Unknown type %s", type);
- return NULL;
- }
-}
-
union any_object {
struct object object;
struct commit commit;
diff --git a/object.h b/object.h
index 749a6f5..bdbf0fa 100644
--- a/object.h
+++ b/object.h
@@ -47,9 +47,6 @@ extern struct object_refs *lookup_object_refs(struct object *);
/** Internal only **/
struct object *lookup_object(const unsigned char *sha1);
-/** Returns the object, having looked it up as being the given type. **/
-struct object *lookup_object_type(const unsigned char *sha1, const char *type);
-
void created_object(const unsigned char *sha1, struct object *obj);
/** Returns the object, having parsed it to find out what it is. **/
diff --git a/tag.c b/tag.c
index 30ffc17..56a49f4 100644
--- a/tag.c
+++ b/tag.c
@@ -1,5 +1,8 @@
#include "cache.h"
#include "tag.h"
+#include "commit.h"
+#include "tree.h"
+#include "blob.h"
const char *tag_type = "tag";
@@ -37,7 +40,7 @@ struct tag *lookup_tag(const unsigned char *sha1)
int parse_tag_buffer(struct tag *item, void *data, unsigned long size)
{
int typelen, taglen;
- unsigned char object[20];
+ unsigned char sha1[20];
const char *type_line, *tag_line, *sig_line;
char type[20];
@@ -47,7 +50,7 @@ int parse_tag_buffer(struct tag *item, void *data, unsigned long size)
if (size < 64)
return -1;
- if (memcmp("object ", data, 7) || get_sha1_hex((char *) data + 7, object))
+ if (memcmp("object ", data, 7) || get_sha1_hex((char *) data + 7, sha1))
return -1;
type_line = (char *) data + 48;
@@ -73,7 +76,19 @@ int parse_tag_buffer(struct tag *item, void *data, unsigned long size)
memcpy(item->tag, tag_line + 4, taglen);
item->tag[taglen] = '\0';
- item->tagged = lookup_object_type(object, type);
+ if (!strcmp(type, blob_type)) {
+ item->tagged = &lookup_blob(sha1)->object;
+ } else if (!strcmp(type, tree_type)) {
+ item->tagged = &lookup_tree(sha1)->object;
+ } else if (!strcmp(type, commit_type)) {
+ item->tagged = &lookup_commit(sha1)->object;
+ } else if (!strcmp(type, tag_type)) {
+ item->tagged = &lookup_tag(sha1)->object;
+ } else {
+ error("Unknown type %s", type);
+ item->tagged = NULL;
+ }
+
if (item->tagged && track_object_refs) {
struct object_refs *refs = alloc_object_refs(1);
refs->ref[0] = item->tagged;