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 | */ |
Nguyễn Thái Ngọc Duy | f8adbec | 2019-01-24 15:29:12 +0700 | [diff] [blame] | 6 | #define USE_THE_INDEX_COMPATIBILITY_MACROS |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 7 | #include "builtin.h" |
Linus Torvalds | e83c516 | 2005-04-07 15:13:13 -0700 | [diff] [blame] | 8 | #include "cache.h" |
Brandon Williams | b2141fc | 2017-06-14 11:07:36 -0700 | [diff] [blame] | 9 | #include "config.h" |
Peter Eriksen | 8e44025 | 2006-04-02 14:44:09 +0200 | [diff] [blame] | 10 | #include "tree.h" |
Junio C Hamano | a52139b | 2006-04-23 16:52:35 -0700 | [diff] [blame] | 11 | #include "cache-tree.h" |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 12 | #include "parse-options.h" |
Junio C Hamano | a52139b | 2006-04-23 16:52:35 -0700 | [diff] [blame] | 13 | |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 14 | static const char * const write_tree_usage[] = { |
Nguyễn Thái Ngọc Duy | b5625d0 | 2012-08-20 19:32:53 +0700 | [diff] [blame] | 15 | N_("git write-tree [--missing-ok] [--prefix=<prefix>/]"), |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 16 | NULL |
| 17 | }; |
Junio C Hamano | 75a46f6 | 2005-12-05 22:30:07 -0800 | [diff] [blame] | 18 | |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 19 | int cmd_write_tree(int argc, const char **argv, const char *cmd_prefix) |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 20 | { |
Junio C Hamano | d11b8d3 | 2009-05-20 11:04:35 -0700 | [diff] [blame] | 21 | int flags = 0, ret; |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 22 | const char *tree_prefix = NULL; |
brian m. carlson | 38b471f | 2018-03-12 02:27:22 +0000 | [diff] [blame] | 23 | struct object_id oid; |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 24 | const char *me = "git-write-tree"; |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 25 | struct option write_tree_options[] = { |
Nguyễn Thái Ngọc Duy | b5625d0 | 2012-08-20 19:32:53 +0700 | [diff] [blame] | 26 | OPT_BIT(0, "missing-ok", &flags, N_("allow missing objects"), |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 27 | WRITE_TREE_MISSING_OK), |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 28 | OPT_STRING(0, "prefix", &tree_prefix, N_("<prefix>/"), |
René Scharfe | 5f0df44 | 2018-08-02 21:18:14 +0200 | [diff] [blame] | 29 | N_("write tree object for a subdirectory <prefix>")), |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 30 | { OPTION_BIT, 0, "ignore-cache-tree", &flags, NULL, |
Nguyễn Thái Ngọc Duy | b5625d0 | 2012-08-20 19:32:53 +0700 | [diff] [blame] | 31 | N_("only useful for debugging"), |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 32 | PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, NULL, |
| 33 | WRITE_TREE_IGNORE_CACHE_TREE }, |
| 34 | OPT_END() |
| 35 | }; |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 36 | |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 37 | git_config(git_default_config, NULL); |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 38 | argc = parse_options(argc, argv, cmd_prefix, write_tree_options, |
Stephen Boyd | 404d42e | 2009-07-07 22:15:38 -0700 | [diff] [blame] | 39 | write_tree_usage, 0); |
Linus Torvalds | d6d3f9d | 2005-04-09 17:09:34 -0700 | [diff] [blame] | 40 | |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 41 | ret = write_cache_as_tree(&oid, flags, tree_prefix); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 42 | switch (ret) { |
| 43 | case 0: |
brian m. carlson | 38b471f | 2018-03-12 02:27:22 +0000 | [diff] [blame] | 44 | printf("%s\n", oid_to_hex(&oid)); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 45 | break; |
| 46 | case WRITE_TREE_UNREADABLE_INDEX: |
| 47 | die("%s: error reading the index", me); |
| 48 | break; |
| 49 | case WRITE_TREE_UNMERGED_INDEX: |
Junio C Hamano | 331fcb5 | 2008-11-28 19:56:34 -0800 | [diff] [blame] | 50 | die("%s: error building trees", me); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 51 | break; |
| 52 | case WRITE_TREE_PREFIX_ERROR: |
Jeff King | 76a7bc0 | 2019-05-09 17:27:24 -0400 | [diff] [blame] | 53 | die("%s: prefix %s not found", me, tree_prefix); |
Junio C Hamano | 45525bd | 2008-01-10 22:49:35 -0800 | [diff] [blame] | 54 | break; |
| 55 | } |
Lukas Sandström | 8ed05fb | 2006-06-13 22:21:42 +0200 | [diff] [blame] | 56 | return ret; |
Linus Torvalds | e83c516 | 2005-04-07 15:13:13 -0700 | [diff] [blame] | 57 | } |