blob: 45d61707e7d11e60e5ba2e6da90017fb38b30dc3 [file] [log] [blame]
Linus Torvalds8bc9a0c2005-04-07 15:16:10 -07001/*
2 * GIT - The information manager from hell
3 *
4 * Copyright (C) Linus Torvalds, 2005
5 */
Nguyễn Thái Ngọc Duyf8adbec2019-01-24 15:29:12 +07006#define USE_THE_INDEX_COMPATIBILITY_MACROS
Lukas Sandström8ed05fb2006-06-13 22:21:42 +02007#include "builtin.h"
Linus Torvaldse83c5162005-04-07 15:13:13 -07008#include "cache.h"
Brandon Williamsb2141fc2017-06-14 11:07:36 -07009#include "config.h"
Peter Eriksen8e440252006-04-02 14:44:09 +020010#include "tree.h"
Junio C Hamanoa52139b2006-04-23 16:52:35 -070011#include "cache-tree.h"
Stephen Boyd404d42e2009-07-07 22:15:38 -070012#include "parse-options.h"
Junio C Hamanoa52139b2006-04-23 16:52:35 -070013
Stephen Boyd404d42e2009-07-07 22:15:38 -070014static const char * const write_tree_usage[] = {
Nguyễn Thái Ngọc Duyb5625d02012-08-20 19:32:53 +070015 N_("git write-tree [--missing-ok] [--prefix=<prefix>/]"),
Stephen Boyd404d42e2009-07-07 22:15:38 -070016 NULL
17};
Junio C Hamano75a46f62005-12-05 22:30:07 -080018
Jeff King76a7bc02019-05-09 17:27:24 -040019int cmd_write_tree(int argc, const char **argv, const char *cmd_prefix)
Lukas Sandström8ed05fb2006-06-13 22:21:42 +020020{
Junio C Hamanod11b8d32009-05-20 11:04:35 -070021 int flags = 0, ret;
Jeff King76a7bc02019-05-09 17:27:24 -040022 const char *tree_prefix = NULL;
brian m. carlson38b471f2018-03-12 02:27:22 +000023 struct object_id oid;
Junio C Hamano45525bd2008-01-10 22:49:35 -080024 const char *me = "git-write-tree";
Stephen Boyd404d42e2009-07-07 22:15:38 -070025 struct option write_tree_options[] = {
Nguyễn Thái Ngọc Duyb5625d02012-08-20 19:32:53 +070026 OPT_BIT(0, "missing-ok", &flags, N_("allow missing objects"),
Stephen Boyd404d42e2009-07-07 22:15:38 -070027 WRITE_TREE_MISSING_OK),
Jeff King76a7bc02019-05-09 17:27:24 -040028 OPT_STRING(0, "prefix", &tree_prefix, N_("<prefix>/"),
René Scharfe5f0df442018-08-02 21:18:14 +020029 N_("write tree object for a subdirectory <prefix>")),
Stephen Boyd404d42e2009-07-07 22:15:38 -070030 { OPTION_BIT, 0, "ignore-cache-tree", &flags, NULL,
Nguyễn Thái Ngọc Duyb5625d02012-08-20 19:32:53 +070031 N_("only useful for debugging"),
Stephen Boyd404d42e2009-07-07 22:15:38 -070032 PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, NULL,
33 WRITE_TREE_IGNORE_CACHE_TREE },
34 OPT_END()
35 };
Lukas Sandström8ed05fb2006-06-13 22:21:42 +020036
Johannes Schindelinef90d6d2008-05-14 18:46:53 +010037 git_config(git_default_config, NULL);
Jeff King76a7bc02019-05-09 17:27:24 -040038 argc = parse_options(argc, argv, cmd_prefix, write_tree_options,
Stephen Boyd404d42e2009-07-07 22:15:38 -070039 write_tree_usage, 0);
Linus Torvaldsd6d3f9d2005-04-09 17:09:34 -070040
Jeff King76a7bc02019-05-09 17:27:24 -040041 ret = write_cache_as_tree(&oid, flags, tree_prefix);
Junio C Hamano45525bd2008-01-10 22:49:35 -080042 switch (ret) {
43 case 0:
brian m. carlson38b471f2018-03-12 02:27:22 +000044 printf("%s\n", oid_to_hex(&oid));
Junio C Hamano45525bd2008-01-10 22:49:35 -080045 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 Hamano331fcb52008-11-28 19:56:34 -080050 die("%s: error building trees", me);
Junio C Hamano45525bd2008-01-10 22:49:35 -080051 break;
52 case WRITE_TREE_PREFIX_ERROR:
Jeff King76a7bc02019-05-09 17:27:24 -040053 die("%s: prefix %s not found", me, tree_prefix);
Junio C Hamano45525bd2008-01-10 22:49:35 -080054 break;
55 }
Lukas Sandström8ed05fb2006-06-13 22:21:42 +020056 return ret;
Linus Torvaldse83c5162005-04-07 15:13:13 -070057}