blob: d775a1545beb84caf05cae8980fb2d839240fdea [file] [log] [blame]
Linus Torvalds8bc9a0c2005-04-07 22:16:101/*
2 * GIT - The information manager from hell
3 *
4 * Copyright (C) Linus Torvalds, 2005
5 */
Linus Torvaldse83c5162005-04-07 22:13:136#include "cache.h"
7
8int main(int argc, char **argv)
9{
10 unsigned char sha1[20];
11 char type[20];
12 void *buf;
13 unsigned long size;
Linus Torvaldse83c5162005-04-07 22:13:1314
Junio C Hamano5da22bc2005-08-30 16:07:5015 setup_git_directory();
Linus Torvalds3c249c92005-05-01 23:36:5616 if (argc != 3 || get_sha1(argv[2], sha1))
Junio C Hamanof16ebbd2005-07-14 03:23:4017 usage("git-cat-file [-t | -s | <type>] <sha1>");
Linus Torvalds11e7d5c2005-05-02 02:28:1818
Junio C Hamano62bb9962005-06-28 06:59:1819 if (!strcmp("-t", argv[1]) || !strcmp("-s", argv[1])) {
Junio C Hamanoc62266f2005-07-01 00:13:0720 if (!sha1_object_info(sha1, type,
21 argv[1][1] == 's' ? &size : NULL)) {
Junio C Hamano62bb9962005-06-28 06:59:1822 switch (argv[1][1]) {
23 case 't':
24 printf("%s\n", type);
25 break;
26 case 's':
27 printf("%lu\n", size);
28 break;
29 }
Junio C Hamanof2a06332005-06-28 06:58:4530 return 0;
Linus Torvalds11e7d5c2005-05-02 02:28:1831 }
Junio C Hamanof2a06332005-06-28 06:58:4532 buf = NULL;
Linus Torvalds11e7d5c2005-05-02 02:28:1833 } else {
34 buf = read_object_with_reference(sha1, argv[1], &size, NULL);
35 }
36
Petr Baudis2de381f2005-04-13 09:28:4837 if (!buf)
Alexey Nezhdanovbab55832005-05-02 04:23:0438 die("git-cat-file %s: bad file", argv[2]);
Linus Torvaldsbf0c6e82005-04-08 16:16:3839
40 while (size > 0) {
41 long ret = write(1, buf, size);
42 if (ret < 0) {
43 if (errno == EAGAIN)
44 continue;
45 /* Ignore epipe */
46 if (errno == EPIPE)
47 break;
Alexey Nezhdanovbab55832005-05-02 04:23:0448 die("git-cat-file: %s", strerror(errno));
Petr Baudis2de381f2005-04-13 09:28:4849 } else if (!ret) {
Alexey Nezhdanovbab55832005-05-02 04:23:0450 die("git-cat-file: disk full?");
Linus Torvaldsbf0c6e82005-04-08 16:16:3851 }
52 size -= ret;
53 buf += ret;
54 }
55 return 0;
Linus Torvaldse83c5162005-04-07 22:13:1356}