1/*
2 * GIT - The information manager from hell
3 *
4 * Copyright (C) Linus Torvalds, 2005
5 */
6#include "builtin.h"
7#include "cache.h"
8#include "tree.h"
9#include "cache-tree.h"
10
11static const char write_tree_usage[] =
12"git-write-tree [--missing-ok] [--prefix=<prefix>/]";
13
14int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
15{
16 int missing_ok = 0, ret;
17 const char *prefix = NULL;
18 unsigned char sha1[20];
19 const char *me = "git-write-tree";
20
21 git_config(git_default_config);
22 while (1 < argc) {
23 const char *arg = argv[1];
24 if (!strcmp(arg, "--missing-ok"))
25 missing_ok = 1;
26 else if (!prefixcmp(arg, "--prefix="))
27 prefix = arg + 9;
28 else
29 usage(write_tree_usage);
30 argc--; argv++;
31 }
32
33 if (argc > 2)
34 die("too many options");
35
36 ret = write_cache_as_tree(sha1, missing_ok, prefix);
37 switch (ret) {
38 case 0:
39 printf("%s\n", sha1_to_hex(sha1));
40 break;
41 case WRITE_TREE_UNREADABLE_INDEX:
42 die("%s: error reading the index", me);
43 break;
44 case WRITE_TREE_UNMERGED_INDEX:
45 die("%s: error building trees; the index is unmerged?", me);
46 break;
47 case WRITE_TREE_PREFIX_ERROR:
48 die("%s: prefix %s not found", me, prefix);
49 break;
50 }
51 return ret;
52}