- usage("git-cat-file [-t | tagname] <sha1>");
-
- if (!strcmp("-t", argv[1])) {
- buf = read_sha1_file(sha1, type, &size);
- if (buf) {
- buf = type;
- size = strlen(type);
- type[size] = '\n';
- size++;
+ usage("git-cat-file [-t|-s|-e|<type>] <sha1>");
+
+ opt = 0;
+ if ( argv[1][0] == '-' ) {
+ opt = argv[1][1];
+ if ( !opt || argv[1][2] )
+ opt = -1; /* Not a single character option */
+ }
+
+ buf = NULL;
+ switch (opt) {
+ case 't':
+ if (!sha1_object_info(sha1, type, NULL)) {
+ printf("%s\n", type);
+ return 0;
+ }
+ break;
+
+ case 's':
+ if (!sha1_object_info(sha1, type, &size)) {
+ printf("%lu\n", size);
+ return 0;