4 const char *tag_type
= "tag";
6 struct tag
*lookup_tag(unsigned char *sha1
)
8 struct object
*obj
= lookup_object(sha1
);
10 struct tag
*ret
= xmalloc(sizeof(struct tag
));
11 memset(ret
, 0, sizeof(struct tag
));
12 created_object(sha1
, &ret
->object
);
13 ret
->object
.type
= tag_type
;
16 if (obj
->type
!= tag_type
) {
17 error("Object %s is a %s, not a tree",
18 sha1_to_hex(sha1
), obj
->type
);
21 return (struct tag
*) obj
;
24 int parse_tag(struct tag
*item
)
30 unsigned char object
[20];
31 const char *type_line
, *tag_line
, *sig_line
;
33 if (item
->object
.parsed
)
35 item
->object
.parsed
= 1;
36 data
= bufptr
= read_sha1_file(item
->object
.sha1
, type
, &size
);
38 return error("Could not read %s",
39 sha1_to_hex(item
->object
.sha1
));
40 if (strcmp(type
, tag_type
)) {
42 return error("Object %s not a tag",
43 sha1_to_hex(item
->object
.sha1
));
48 if (memcmp("object ", data
, 7) || get_sha1_hex(data
+ 7, object
))
51 item
->tagged
= parse_object(object
);
53 add_ref(&item
->object
, item
->tagged
);
55 type_line
= data
+ 48;
56 if (memcmp("\ntype ", type_line
-1, 6))
59 tag_line
= strchr(type_line
, '\n');
60 if (!tag_line
|| memcmp("tag ", ++tag_line
, 4))
63 sig_line
= strchr(tag_line
, '\n');
68 typelen
= tag_line
- type_line
- strlen("type \n");
71 taglen
= sig_line
- tag_line
- strlen("tag \n");
72 item
->tag
= xmalloc(taglen
+ 1);
73 memcpy(item
->tag
, tag_line
+ 4, taglen
);
74 item
->tag
[taglen
] = '\0';