]>
Commit | Line | Data |
---|---|---|
6a257f03 DS |
1 | #include "builtin.h" |
2 | #include "cache.h" | |
3 | #include "config.h" | |
4 | #include "parse-options.h" | |
a3407730 | 5 | #include "midx.h" |
d829223a | 6 | #include "trace2.h" |
9218c6a4 | 7 | #include "object-store.h" |
6a257f03 | 8 | |
b25b7274 | 9 | #define BUILTIN_MIDX_WRITE_USAGE \ |
9218c6a4 | 10 | N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]") |
b25b7274 TB |
11 | |
12 | #define BUILTIN_MIDX_VERIFY_USAGE \ | |
13 | N_("git multi-pack-index [<options>] verify") | |
14 | ||
15 | #define BUILTIN_MIDX_EXPIRE_USAGE \ | |
16 | N_("git multi-pack-index [<options>] expire") | |
17 | ||
18 | #define BUILTIN_MIDX_REPACK_USAGE \ | |
19 | N_("git multi-pack-index [<options>] repack [--batch-size=<size>]") | |
20 | ||
60ca9476 TB |
21 | static char const * const builtin_multi_pack_index_write_usage[] = { |
22 | BUILTIN_MIDX_WRITE_USAGE, | |
23 | NULL | |
24 | }; | |
25 | static char const * const builtin_multi_pack_index_verify_usage[] = { | |
26 | BUILTIN_MIDX_VERIFY_USAGE, | |
27 | NULL | |
28 | }; | |
29 | static char const * const builtin_multi_pack_index_expire_usage[] = { | |
30 | BUILTIN_MIDX_EXPIRE_USAGE, | |
31 | NULL | |
32 | }; | |
33 | static char const * const builtin_multi_pack_index_repack_usage[] = { | |
34 | BUILTIN_MIDX_REPACK_USAGE, | |
35 | NULL | |
36 | }; | |
6a257f03 | 37 | static char const * const builtin_multi_pack_index_usage[] = { |
b25b7274 TB |
38 | BUILTIN_MIDX_WRITE_USAGE, |
39 | BUILTIN_MIDX_VERIFY_USAGE, | |
40 | BUILTIN_MIDX_EXPIRE_USAGE, | |
41 | BUILTIN_MIDX_REPACK_USAGE, | |
6a257f03 DS |
42 | NULL |
43 | }; | |
44 | ||
45 | static struct opts_multi_pack_index { | |
46 | const char *object_dir; | |
9218c6a4 | 47 | const char *preferred_pack; |
2af890bb | 48 | unsigned long batch_size; |
f7c4d63e | 49 | unsigned flags; |
6a257f03 DS |
50 | } opts; |
51 | ||
60ca9476 TB |
52 | static struct option common_opts[] = { |
53 | OPT_FILENAME(0, "object-dir", &opts.object_dir, | |
54 | N_("object directory containing set of packfile and pack-index pairs")), | |
55 | OPT_BIT(0, "progress", &opts.flags, N_("force progress reporting"), MIDX_PROGRESS), | |
56 | OPT_END(), | |
57 | }; | |
58 | ||
59 | static struct option *add_common_options(struct option *prev) | |
60 | { | |
61 | return parse_options_concat(common_opts, prev); | |
62 | } | |
63 | ||
64 | static int cmd_multi_pack_index_write(int argc, const char **argv) | |
65 | { | |
9218c6a4 TB |
66 | struct option *options; |
67 | static struct option builtin_multi_pack_index_write_options[] = { | |
68 | OPT_STRING(0, "preferred-pack", &opts.preferred_pack, | |
69 | N_("preferred-pack"), | |
70 | N_("pack for reuse when computing a multi-pack bitmap")), | |
71 | OPT_END(), | |
72 | }; | |
73 | ||
74 | options = add_common_options(builtin_multi_pack_index_write_options); | |
60ca9476 | 75 | |
690eb057 TB |
76 | trace2_cmd_mode(argv[0]); |
77 | ||
60ca9476 TB |
78 | argc = parse_options(argc, argv, NULL, |
79 | options, builtin_multi_pack_index_write_usage, | |
80 | PARSE_OPT_KEEP_UNKNOWN); | |
81 | if (argc) | |
82 | usage_with_options(builtin_multi_pack_index_write_usage, | |
83 | options); | |
84 | ||
9218c6a4 TB |
85 | FREE_AND_NULL(options); |
86 | ||
87 | return write_midx_file(opts.object_dir, opts.preferred_pack, | |
88 | opts.flags); | |
60ca9476 TB |
89 | } |
90 | ||
91 | static int cmd_multi_pack_index_verify(int argc, const char **argv) | |
92 | { | |
93 | struct option *options = common_opts; | |
94 | ||
690eb057 TB |
95 | trace2_cmd_mode(argv[0]); |
96 | ||
60ca9476 TB |
97 | argc = parse_options(argc, argv, NULL, |
98 | options, builtin_multi_pack_index_verify_usage, | |
99 | PARSE_OPT_KEEP_UNKNOWN); | |
100 | if (argc) | |
101 | usage_with_options(builtin_multi_pack_index_verify_usage, | |
102 | options); | |
103 | ||
104 | return verify_midx_file(the_repository, opts.object_dir, opts.flags); | |
105 | } | |
106 | ||
107 | static int cmd_multi_pack_index_expire(int argc, const char **argv) | |
108 | { | |
109 | struct option *options = common_opts; | |
110 | ||
690eb057 TB |
111 | trace2_cmd_mode(argv[0]); |
112 | ||
60ca9476 TB |
113 | argc = parse_options(argc, argv, NULL, |
114 | options, builtin_multi_pack_index_expire_usage, | |
115 | PARSE_OPT_KEEP_UNKNOWN); | |
116 | if (argc) | |
117 | usage_with_options(builtin_multi_pack_index_expire_usage, | |
118 | options); | |
119 | ||
120 | return expire_midx_packs(the_repository, opts.object_dir, opts.flags); | |
121 | } | |
122 | ||
123 | static int cmd_multi_pack_index_repack(int argc, const char **argv) | |
6a257f03 | 124 | { |
60ca9476 TB |
125 | struct option *options; |
126 | static struct option builtin_multi_pack_index_repack_options[] = { | |
2af890bb DS |
127 | OPT_MAGNITUDE(0, "batch-size", &opts.batch_size, |
128 | N_("during repack, collect pack-files of smaller size into a batch that is larger than this size")), | |
6a257f03 DS |
129 | OPT_END(), |
130 | }; | |
131 | ||
60ca9476 TB |
132 | options = add_common_options(builtin_multi_pack_index_repack_options); |
133 | ||
690eb057 TB |
134 | trace2_cmd_mode(argv[0]); |
135 | ||
60ca9476 TB |
136 | argc = parse_options(argc, argv, NULL, |
137 | options, | |
138 | builtin_multi_pack_index_repack_usage, | |
139 | PARSE_OPT_KEEP_UNKNOWN); | |
140 | if (argc) | |
141 | usage_with_options(builtin_multi_pack_index_repack_usage, | |
142 | options); | |
143 | ||
144 | FREE_AND_NULL(options); | |
145 | ||
146 | return midx_repack(the_repository, opts.object_dir, | |
147 | (size_t)opts.batch_size, opts.flags); | |
148 | } | |
149 | ||
150 | int cmd_multi_pack_index(int argc, const char **argv, | |
151 | const char *prefix) | |
152 | { | |
153 | struct option *builtin_multi_pack_index_options = common_opts; | |
154 | ||
6a257f03 DS |
155 | git_config(git_default_config, NULL); |
156 | ||
cf1f5389 TB |
157 | if (isatty(2)) |
158 | opts.flags |= MIDX_PROGRESS; | |
6a257f03 DS |
159 | argc = parse_options(argc, argv, prefix, |
160 | builtin_multi_pack_index_options, | |
60ca9476 TB |
161 | builtin_multi_pack_index_usage, |
162 | PARSE_OPT_STOP_AT_NON_OPTION); | |
6a257f03 DS |
163 | |
164 | if (!opts.object_dir) | |
165 | opts.object_dir = get_object_directory(); | |
166 | ||
a3407730 | 167 | if (argc == 0) |
cd57bc41 | 168 | goto usage; |
a3407730 | 169 | |
2af890bb | 170 | if (!strcmp(argv[0], "repack")) |
60ca9476 TB |
171 | return cmd_multi_pack_index_repack(argc, argv); |
172 | else if (!strcmp(argv[0], "write")) | |
173 | return cmd_multi_pack_index_write(argc, argv); | |
174 | else if (!strcmp(argv[0], "verify")) | |
175 | return cmd_multi_pack_index_verify(argc, argv); | |
176 | else if (!strcmp(argv[0], "expire")) | |
177 | return cmd_multi_pack_index_expire(argc, argv); | |
cd57bc41 TB |
178 | else { |
179 | usage: | |
180 | error(_("unrecognized subcommand: %s"), argv[0]); | |
181 | usage_with_options(builtin_multi_pack_index_usage, | |
182 | builtin_multi_pack_index_options); | |
183 | } | |
6a257f03 | 184 | } |