summaryrefslogtreecommitdiff
path: root/tag.c
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2007-02-26 19:56:00 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-02-27 09:34:21 (GMT)
commit0ab179504a17907c395a4009f7c23d2f71bba1d3 (patch)
tree0bdd9634b1bb7a5cb31c2f871259cf737f5c6278 /tag.c
parent21666f1aae4e890d8f50924f9e80763b27e6a45d (diff)
downloadgit-0ab179504a17907c395a4009f7c23d2f71bba1d3.zip
git-0ab179504a17907c395a4009f7c23d2f71bba1d3.tar.gz
git-0ab179504a17907c395a4009f7c23d2f71bba1d3.tar.bz2
get rid of lookup_object_type()
This function is called only once in the whole source tree. Let's move its code inline instead, which is also in the spirit of removing as much object type char arrays as possible (not that this patch does anything for that but at least it is now a local matter). Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'tag.c')
-rw-r--r--tag.c21
1 files changed, 18 insertions, 3 deletions
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;