Linus Torvalds | 8bc9a0c | 2005-04-07 15:16:10 -0700 | [diff] [blame] | 1 | /* |
| 2 | * GIT - The information manager from hell |
| 3 | * |
| 4 | * Copyright (C) Linus Torvalds, 2005 |
| 5 | */ |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 6 | #include "builtin.h" |
Linus Torvalds | e83c516 | 2005-04-07 15:13:13 -0700 | [diff] [blame] | 7 | #include "cache.h" |
Peter Eriksen | 8e44025 | 2006-04-02 14:44:09 +0200 | [diff] [blame] | 8 | #include "tree.h" |
Junio C Hamano | a52139b | 2006-04-23 16:52:35 -0700 | [diff] [blame] | 9 | #include "cache-tree.h" |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 10 | #include "parse-options.h" |
Junio C Hamano | a52139b | 2006-04-23 16:52:35 -0700 | [diff] [blame] | 11 | |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 12 | static const char * const write_tree_usage[] = { |
| 13 | "git write-tree [--missing-ok] [--prefix=<prefix>/]", |
| 14 | NULL |
| 15 | }; |
Junio C Hamano | 75a46f6 | 2005-12-05 22:30:07 -0800 | [diff] [blame] | 16 | |
Linus Torvalds | a633fca | 2006-07-28 22:44:25 -0700 | [diff] [blame] | 17 | int cmd_write_tree(int argc, const char **argv, const char *unused_prefix) |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 18 | { |
Junio C Hamano | d11b8d3 | 2009-05-20 11:04:35 -0700 | [diff] [blame] | 19 | int flags = 0, ret; |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 20 | const char *prefix = NULL; |
| 21 | unsigned char sha1[20]; |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 22 | const char *me = "git-write-tree"; |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 23 | struct option write_tree_options[] = { |
| 24 | OPT_BIT(0, "missing-ok", &flags, "allow missing objects", |
| 25 | WRITE_TREE_MISSING_OK), |
| 26 | { OPTION_STRING, 0, "prefix", &prefix, "<prefix>/", |
| 27 | "write tree object for a subdirectory <prefix>" , |
| 28 | PARSE_OPT_LITERAL_ARGHELP }, |
| 29 | { OPTION_BIT, 0, "ignore-cache-tree", &flags, NULL, |
| 30 | "only useful for debugging", |
| 31 | PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, NULL, |
| 32 | WRITE_TREE_IGNORE_CACHE_TREE }, |
| 33 | OPT_END() |
| 34 | }; |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 35 | |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 36 | git_config(git_default_config, NULL); |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 37 | argc = parse_options(argc, argv, unused_prefix, write_tree_options, |
| 38 | write_tree_usage, 0); |
Linus Torvalds | d6d3f9d | 2005-04-09 17:09:34 -0700 | [diff] [blame] | 39 | |
Junio C Hamano | d11b8d3 | 2009-05-20 11:04:35 -0700 | [diff] [blame] | 40 | ret = write_cache_as_tree(sha1, flags, prefix); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 41 | switch (ret) { |
| 42 | case 0: |
| 43 | printf("%s\n", sha1_to_hex(sha1)); |
| 44 | break; |
| 45 | case WRITE_TREE_UNREADABLE_INDEX: |
| 46 | die("%s: error reading the index", me); |
| 47 | break; |
| 48 | case WRITE_TREE_UNMERGED_INDEX: |
Junio C Hamano | 331fcb5 | 2008-11-28 19:56:34 -0800 | [diff] [blame] | 49 | die("%s: error building trees", me); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 50 | break; |
| 51 | case WRITE_TREE_PREFIX_ERROR: |
| 52 | die("%s: prefix %s not found", me, prefix); |
| 53 | break; |
| 54 | } |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 55 | return ret; |
Linus Torvalds | e83c516 | 2005-04-07 15:13:13 -0700 | [diff] [blame] | 56 | } |