blob: e57eae10bf73baac79fd8b95ddb0ff1b4c8c0cd6 [file] [log] [blame]
Junio C Hamanob65bc212006-06-24 00:59:49 -07001#include "cache.h"
2
3int main(int ac, char **av)
4{
Nicolas Pitre9126f002008-10-01 14:05:20 -04005 git_SHA_CTX ctx;
Junio C Hamanob65bc212006-06-24 00:59:49 -07006 unsigned char sha1[20];
Junio C Hamanob57cbbf2006-06-24 02:59:20 -07007 unsigned bufsz = 8192;
Jeff King54c93cb2013-08-22 19:12:42 -04008 int binary = 0;
Junio C Hamanob57cbbf2006-06-24 02:59:20 -07009 char *buffer;
10
Jeff King54c93cb2013-08-22 19:12:42 -040011 if (ac == 2) {
12 if (!strcmp(av[1], "-b"))
13 binary = 1;
14 else
15 bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024;
16 }
Junio C Hamanob57cbbf2006-06-24 02:59:20 -070017
18 if (!bufsz)
19 bufsz = 8192;
20
21 while ((buffer = malloc(bufsz)) == NULL) {
22 fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz);
23 bufsz /= 2;
24 if (bufsz < 1024)
25 die("OOPS");
26 }
Junio C Hamanob65bc212006-06-24 00:59:49 -070027
Nicolas Pitre9126f002008-10-01 14:05:20 -040028 git_SHA1_Init(&ctx);
Junio C Hamanob65bc212006-06-24 00:59:49 -070029
30 while (1) {
Junio C Hamanob57cbbf2006-06-24 02:59:20 -070031 ssize_t sz, this_sz;
32 char *cp = buffer;
33 unsigned room = bufsz;
34 this_sz = 0;
35 while (room) {
36 sz = xread(0, cp, room);
37 if (sz == 0)
38 break;
39 if (sz < 0)
Thomas Rastd824cbb2009-06-27 17:58:46 +020040 die_errno("test-sha1");
Junio C Hamanob57cbbf2006-06-24 02:59:20 -070041 this_sz += sz;
42 cp += sz;
43 room -= sz;
44 }
45 if (this_sz == 0)
Junio C Hamanob65bc212006-06-24 00:59:49 -070046 break;
Nicolas Pitre9126f002008-10-01 14:05:20 -040047 git_SHA1_Update(&ctx, buffer, this_sz);
Junio C Hamanob65bc212006-06-24 00:59:49 -070048 }
Nicolas Pitre9126f002008-10-01 14:05:20 -040049 git_SHA1_Final(sha1, &ctx);
Jeff King54c93cb2013-08-22 19:12:42 -040050
51 if (binary)
52 fwrite(sha1, 1, 20, stdout);
53 else
54 puts(sha1_to_hex(sha1));
Junio C Hamanob65bc212006-06-24 00:59:49 -070055 exit(0);
56}