1717#define BUILTIN_MIDX_REPACK_USAGE \
1818 N_("git multi-pack-index [<options>] repack [--batch-size=<size>]")
1919
20+ static char const * const builtin_multi_pack_index_write_usage [] = {
21+ BUILTIN_MIDX_WRITE_USAGE ,
22+ NULL
23+ };
24+ static char const * const builtin_multi_pack_index_verify_usage [] = {
25+ BUILTIN_MIDX_VERIFY_USAGE ,
26+ NULL
27+ };
28+ static char const * const builtin_multi_pack_index_expire_usage [] = {
29+ BUILTIN_MIDX_EXPIRE_USAGE ,
30+ NULL
31+ };
32+ static char const * const builtin_multi_pack_index_repack_usage [] = {
33+ BUILTIN_MIDX_REPACK_USAGE ,
34+ NULL
35+ };
2036static char const * const builtin_multi_pack_index_usage [] = {
2137 BUILTIN_MIDX_WRITE_USAGE ,
2238 BUILTIN_MIDX_VERIFY_USAGE ,
@@ -31,25 +47,98 @@ static struct opts_multi_pack_index {
3147 unsigned flags ;
3248} opts ;
3349
34- int cmd_multi_pack_index (int argc , const char * * argv ,
35- const char * prefix )
50+ static struct option common_opts [] = {
51+ OPT_FILENAME (0 , "object-dir" , & opts .object_dir ,
52+ N_ ("object directory containing set of packfile and pack-index pairs" )),
53+ OPT_BIT (0 , "progress" , & opts .flags , N_ ("force progress reporting" ), MIDX_PROGRESS ),
54+ OPT_END (),
55+ };
56+
57+ static struct option * add_common_options (struct option * prev )
58+ {
59+ return parse_options_concat (common_opts , prev );
60+ }
61+
62+ static int cmd_multi_pack_index_write (int argc , const char * * argv )
63+ {
64+ struct option * options = common_opts ;
65+
66+ argc = parse_options (argc , argv , NULL ,
67+ options , builtin_multi_pack_index_write_usage ,
68+ PARSE_OPT_KEEP_UNKNOWN );
69+ if (argc )
70+ usage_with_options (builtin_multi_pack_index_write_usage ,
71+ options );
72+
73+ return write_midx_file (opts .object_dir , opts .flags );
74+ }
75+
76+ static int cmd_multi_pack_index_verify (int argc , const char * * argv )
77+ {
78+ struct option * options = common_opts ;
79+
80+ argc = parse_options (argc , argv , NULL ,
81+ options , builtin_multi_pack_index_verify_usage ,
82+ PARSE_OPT_KEEP_UNKNOWN );
83+ if (argc )
84+ usage_with_options (builtin_multi_pack_index_verify_usage ,
85+ options );
86+
87+ return verify_midx_file (the_repository , opts .object_dir , opts .flags );
88+ }
89+
90+ static int cmd_multi_pack_index_expire (int argc , const char * * argv )
91+ {
92+ struct option * options = common_opts ;
93+
94+ argc = parse_options (argc , argv , NULL ,
95+ options , builtin_multi_pack_index_expire_usage ,
96+ PARSE_OPT_KEEP_UNKNOWN );
97+ if (argc )
98+ usage_with_options (builtin_multi_pack_index_expire_usage ,
99+ options );
100+
101+ return expire_midx_packs (the_repository , opts .object_dir , opts .flags );
102+ }
103+
104+ static int cmd_multi_pack_index_repack (int argc , const char * * argv )
36105{
37- static struct option builtin_multi_pack_index_options [] = {
38- OPT_FILENAME (0 , "object-dir" , & opts .object_dir ,
39- N_ ("object directory containing set of packfile and pack-index pairs" )),
40- OPT_BIT (0 , "progress" , & opts .flags , N_ ("force progress reporting" ), MIDX_PROGRESS ),
106+ struct option * options ;
107+ static struct option builtin_multi_pack_index_repack_options [] = {
41108 OPT_MAGNITUDE (0 , "batch-size" , & opts .batch_size ,
42109 N_ ("during repack, collect pack-files of smaller size into a batch that is larger than this size" )),
43110 OPT_END (),
44111 };
45112
113+ options = add_common_options (builtin_multi_pack_index_repack_options );
114+
115+ argc = parse_options (argc , argv , NULL ,
116+ options ,
117+ builtin_multi_pack_index_repack_usage ,
118+ PARSE_OPT_KEEP_UNKNOWN );
119+ if (argc )
120+ usage_with_options (builtin_multi_pack_index_repack_usage ,
121+ options );
122+
123+ FREE_AND_NULL (options );
124+
125+ return midx_repack (the_repository , opts .object_dir ,
126+ (size_t )opts .batch_size , opts .flags );
127+ }
128+
129+ int cmd_multi_pack_index (int argc , const char * * argv ,
130+ const char * prefix )
131+ {
132+ struct option * builtin_multi_pack_index_options = common_opts ;
133+
46134 git_config (git_default_config , NULL );
47135
48136 if (isatty (2 ))
49137 opts .flags |= MIDX_PROGRESS ;
50138 argc = parse_options (argc , argv , prefix ,
51139 builtin_multi_pack_index_options ,
52- builtin_multi_pack_index_usage , 0 );
140+ builtin_multi_pack_index_usage ,
141+ PARSE_OPT_STOP_AT_NON_OPTION );
53142
54143 if (!opts .object_dir )
55144 opts .object_dir = get_object_directory ();
@@ -58,25 +147,16 @@ int cmd_multi_pack_index(int argc, const char **argv,
58147 usage_with_options (builtin_multi_pack_index_usage ,
59148 builtin_multi_pack_index_options );
60149
61- if (argc > 1 ) {
62- die (_ ("too many arguments" ));
63- return 1 ;
64- }
65-
66150 trace2_cmd_mode (argv [0 ]);
67151
68152 if (!strcmp (argv [0 ], "repack" ))
69- return midx_repack (the_repository , opts .object_dir ,
70- (size_t )opts .batch_size , opts .flags );
71- if (opts .batch_size )
72- die (_ ("--batch-size option is only for 'repack' subcommand" ));
73-
74- if (!strcmp (argv [0 ], "write" ))
75- return write_midx_file (opts .object_dir , opts .flags );
76- if (!strcmp (argv [0 ], "verify" ))
77- return verify_midx_file (the_repository , opts .object_dir , opts .flags );
78- if (!strcmp (argv [0 ], "expire" ))
79- return expire_midx_packs (the_repository , opts .object_dir , opts .flags );
80-
81- die (_ ("unrecognized subcommand: %s" ), argv [0 ]);
153+ return cmd_multi_pack_index_repack (argc , argv );
154+ else if (!strcmp (argv [0 ], "write" ))
155+ return cmd_multi_pack_index_write (argc , argv );
156+ else if (!strcmp (argv [0 ], "verify" ))
157+ return cmd_multi_pack_index_verify (argc , argv );
158+ else if (!strcmp (argv [0 ], "expire" ))
159+ return cmd_multi_pack_index_expire (argc , argv );
160+ else
161+ die (_ ("unrecognized subcommand: %s" ), argv [0 ]);
82162}
0 commit comments