blob: 5bf88cd2a8e2c338bb63590b42e9388edbf1e2d7 [file] [log] [blame]
Derrick Stolee6a257f02018-07-12 15:39:20 -04001#include "builtin.h"
2#include "cache.h"
3#include "config.h"
4#include "parse-options.h"
Derrick Stoleea3407732018-07-12 15:39:21 -04005#include "midx.h"
Jeff Hostetlerd8292232019-03-21 12:36:13 -07006#include "trace2.h"
Derrick Stolee6a257f02018-07-12 15:39:20 -04007
8static char const * const builtin_multi_pack_index_usage[] = {
William Baker680cba22019-10-21 18:40:03 +00009 N_("git multi-pack-index [<options>] (write|verify|expire|repack --batch-size=<size>)"),
Derrick Stolee6a257f02018-07-12 15:39:20 -040010 NULL
11};
12
13static struct opts_multi_pack_index {
14 const char *object_dir;
Derrick Stolee2af890b2019-06-10 16:35:26 -070015 unsigned long batch_size;
William Baker680cba22019-10-21 18:40:03 +000016 int progress;
Derrick Stolee6a257f02018-07-12 15:39:20 -040017} opts;
18
19int cmd_multi_pack_index(int argc, const char **argv,
20 const char *prefix)
21{
William Baker680cba22019-10-21 18:40:03 +000022 unsigned flags = 0;
23
Derrick Stolee6a257f02018-07-12 15:39:20 -040024 static struct option builtin_multi_pack_index_options[] = {
25 OPT_FILENAME(0, "object-dir", &opts.object_dir,
26 N_("object directory containing set of packfile and pack-index pairs")),
William Baker680cba22019-10-21 18:40:03 +000027 OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
Derrick Stolee2af890b2019-06-10 16:35:26 -070028 OPT_MAGNITUDE(0, "batch-size", &opts.batch_size,
29 N_("during repack, collect pack-files of smaller size into a batch that is larger than this size")),
Derrick Stolee6a257f02018-07-12 15:39:20 -040030 OPT_END(),
31 };
32
33 git_config(git_default_config, NULL);
34
William Baker680cba22019-10-21 18:40:03 +000035 opts.progress = isatty(2);
Derrick Stolee6a257f02018-07-12 15:39:20 -040036 argc = parse_options(argc, argv, prefix,
37 builtin_multi_pack_index_options,
38 builtin_multi_pack_index_usage, 0);
39
40 if (!opts.object_dir)
41 opts.object_dir = get_object_directory();
William Baker680cba22019-10-21 18:40:03 +000042 if (opts.progress)
43 flags |= MIDX_PROGRESS;
Derrick Stolee6a257f02018-07-12 15:39:20 -040044
Derrick Stoleea3407732018-07-12 15:39:21 -040045 if (argc == 0)
Derrick Stolee6d68e6a2018-08-20 16:51:53 +000046 usage_with_options(builtin_multi_pack_index_usage,
47 builtin_multi_pack_index_options);
Derrick Stoleea3407732018-07-12 15:39:21 -040048
Derrick Stolee6d68e6a2018-08-20 16:51:53 +000049 if (argc > 1) {
50 die(_("too many arguments"));
51 return 1;
Derrick Stoleea3407732018-07-12 15:39:21 -040052 }
53
Jeff Hostetlerd8292232019-03-21 12:36:13 -070054 trace2_cmd_mode(argv[0]);
55
Derrick Stolee2af890b2019-06-10 16:35:26 -070056 if (!strcmp(argv[0], "repack"))
William Baker680cba22019-10-21 18:40:03 +000057 return midx_repack(the_repository, opts.object_dir,
58 (size_t)opts.batch_size, flags);
Derrick Stolee2af890b2019-06-10 16:35:26 -070059 if (opts.batch_size)
60 die(_("--batch-size option is only for 'repack' subcommand"));
61
Derrick Stolee6d68e6a2018-08-20 16:51:53 +000062 if (!strcmp(argv[0], "write"))
William Baker680cba22019-10-21 18:40:03 +000063 return write_midx_file(opts.object_dir, flags);
Derrick Stolee56ee7ff2018-09-13 11:02:13 -070064 if (!strcmp(argv[0], "verify"))
William Baker680cba22019-10-21 18:40:03 +000065 return verify_midx_file(the_repository, opts.object_dir, flags);
Derrick Stoleecff97112019-06-10 16:35:23 -070066 if (!strcmp(argv[0], "expire"))
William Baker680cba22019-10-21 18:40:03 +000067 return expire_midx_packs(the_repository, opts.object_dir, flags);
Derrick Stolee6d68e6a2018-08-20 16:51:53 +000068
Derrick Stolee2af890b2019-06-10 16:35:26 -070069 die(_("unrecognized subcommand: %s"), argv[0]);
Derrick Stolee6a257f02018-07-12 15:39:20 -040070}