- mark_needs_sha1(sha1, "tree", tree_sha1);
- data += 5 + 40 + 1; /* "tree " + <hex sha1> + '\n' */
- while (!memcmp(data, "parent ", 7)) {
- if (get_sha1_hex(data + 7, parent_sha1) < 0)
- return -1;
- mark_needs_sha1(sha1, "commit", parent_sha1);
- data += 7 + 40 + 1; /* "parent " + <hex sha1> + '\n' */
- }
+
+ type_line = data + 48;
+ if (memcmp("\ntype ", type_line-1, 6))
+ return -1;
+
+ tag_line = strchr(type_line, '\n');
+ if (!tag_line || memcmp("tag ", ++tag_line, 4))
+ return -1;
+
+ sig_line = strchr(tag_line, '\n');
+ if (!sig_line)
+ return -1;
+ sig_line++;
+
+ typelen = tag_line - type_line - strlen("type \n");
+ if (typelen >= 20)
+ return -1;
+ taglen = sig_line - tag_line - strlen("tag \n");
+
+ if (!show_tags)
+ return 0;
+
+ strcpy(object_hex, sha1_to_hex(object));
+ printf("tagged %.*s %s (%.*s) in %s\n",
+ typelen, type_line + 5,
+ object_hex,
+ taglen, tag_line + 4,
+ sha1_to_hex(sha1));