4
4
#include "help.h"
5
5
#include "run-command.h"
6
6
7
+ #define RUN_SETUP (1<<0)
8
+ #define RUN_SETUP_GENTLY (1<<1)
9
+ #define USE_PAGER (1<<2)
10
+ /*
11
+ * require working tree to be present -- anything uses this needs
12
+ * RUN_SETUP for reading from the configuration file.
13
+ */
14
+ #define NEED_WORK_TREE (1<<3)
15
+ #define SUPPORT_SUPER_PREFIX (1<<4)
16
+ #define DELAY_PAGER_CONFIG (1<<5)
17
+ #define NO_PARSEOPT (1<<6) /* parse-options is not used */
18
+
19
+ struct cmd_struct {
20
+ const char * cmd ;
21
+ int (* fn )(int , const char * * , const char * );
22
+ unsigned int option ;
23
+ };
24
+
7
25
const char git_usage_string [] =
8
26
N_ ("git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
9
27
" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
@@ -18,7 +36,7 @@ const char git_more_info_string[] =
18
36
19
37
static int use_pager = -1 ;
20
38
21
- static void list_builtins (void );
39
+ static void list_builtins (unsigned int exclude_option , char sep );
22
40
23
41
static void commit_pager_choice (void ) {
24
42
switch (use_pager ) {
@@ -206,7 +224,10 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
206
224
(* argv )++ ;
207
225
(* argc )-- ;
208
226
} else if (!strcmp (cmd , "--list-builtins" )) {
209
- list_builtins ();
227
+ list_builtins (0 , '\n' );
228
+ exit (0 );
229
+ } else if (!strcmp (cmd , "--list-parseopt-builtins" )) {
230
+ list_builtins (NO_PARSEOPT , ' ' );
210
231
exit (0 );
211
232
} else {
212
233
fprintf (stderr , _ ("unknown option: %s\n" ), cmd );
@@ -288,23 +309,6 @@ static int handle_alias(int *argcp, const char ***argv)
288
309
return ret ;
289
310
}
290
311
291
- #define RUN_SETUP (1<<0)
292
- #define RUN_SETUP_GENTLY (1<<1)
293
- #define USE_PAGER (1<<2)
294
- /*
295
- * require working tree to be present -- anything uses this needs
296
- * RUN_SETUP for reading from the configuration file.
297
- */
298
- #define NEED_WORK_TREE (1<<3)
299
- #define SUPPORT_SUPER_PREFIX (1<<4)
300
- #define DELAY_PAGER_CONFIG (1<<5)
301
-
302
- struct cmd_struct {
303
- const char * cmd ;
304
- int (* fn )(int , const char * * , const char * );
305
- int option ;
306
- };
307
-
308
312
static int run_builtin (struct cmd_struct * p , int argc , const char * * argv )
309
313
{
310
314
int status , help ;
@@ -367,18 +371,18 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
367
371
static struct cmd_struct commands [] = {
368
372
{ "add" , cmd_add , RUN_SETUP | NEED_WORK_TREE },
369
373
{ "am" , cmd_am , RUN_SETUP | NEED_WORK_TREE },
370
- { "annotate" , cmd_annotate , RUN_SETUP },
374
+ { "annotate" , cmd_annotate , RUN_SETUP | NO_PARSEOPT },
371
375
{ "apply" , cmd_apply , RUN_SETUP_GENTLY },
372
376
{ "archive" , cmd_archive , RUN_SETUP_GENTLY },
373
377
{ "bisect--helper" , cmd_bisect__helper , RUN_SETUP },
374
378
{ "blame" , cmd_blame , RUN_SETUP },
375
379
{ "branch" , cmd_branch , RUN_SETUP | DELAY_PAGER_CONFIG },
376
- { "bundle" , cmd_bundle , RUN_SETUP_GENTLY },
380
+ { "bundle" , cmd_bundle , RUN_SETUP_GENTLY | NO_PARSEOPT },
377
381
{ "cat-file" , cmd_cat_file , RUN_SETUP },
378
382
{ "check-attr" , cmd_check_attr , RUN_SETUP },
379
383
{ "check-ignore" , cmd_check_ignore , RUN_SETUP | NEED_WORK_TREE },
380
384
{ "check-mailmap" , cmd_check_mailmap , RUN_SETUP },
381
- { "check-ref-format" , cmd_check_ref_format },
385
+ { "check-ref-format" , cmd_check_ref_format , NO_PARSEOPT },
382
386
{ "checkout" , cmd_checkout , RUN_SETUP | NEED_WORK_TREE },
383
387
{ "checkout-index" , cmd_checkout_index ,
384
388
RUN_SETUP | NEED_WORK_TREE },
@@ -388,58 +392,58 @@ static struct cmd_struct commands[] = {
388
392
{ "clone" , cmd_clone },
389
393
{ "column" , cmd_column , RUN_SETUP_GENTLY },
390
394
{ "commit" , cmd_commit , RUN_SETUP | NEED_WORK_TREE },
391
- { "commit-tree" , cmd_commit_tree , RUN_SETUP },
395
+ { "commit-tree" , cmd_commit_tree , RUN_SETUP | NO_PARSEOPT },
392
396
{ "config" , cmd_config , RUN_SETUP_GENTLY | DELAY_PAGER_CONFIG },
393
397
{ "count-objects" , cmd_count_objects , RUN_SETUP },
394
- { "credential" , cmd_credential , RUN_SETUP_GENTLY },
398
+ { "credential" , cmd_credential , RUN_SETUP_GENTLY | NO_PARSEOPT },
395
399
{ "describe" , cmd_describe , RUN_SETUP },
396
- { "diff" , cmd_diff },
397
- { "diff-files" , cmd_diff_files , RUN_SETUP | NEED_WORK_TREE },
398
- { "diff-index" , cmd_diff_index , RUN_SETUP },
399
- { "diff-tree" , cmd_diff_tree , RUN_SETUP },
400
+ { "diff" , cmd_diff , NO_PARSEOPT },
401
+ { "diff-files" , cmd_diff_files , RUN_SETUP | NEED_WORK_TREE | NO_PARSEOPT },
402
+ { "diff-index" , cmd_diff_index , RUN_SETUP | NO_PARSEOPT },
403
+ { "diff-tree" , cmd_diff_tree , RUN_SETUP | NO_PARSEOPT },
400
404
{ "difftool" , cmd_difftool , RUN_SETUP | NEED_WORK_TREE },
401
405
{ "fast-export" , cmd_fast_export , RUN_SETUP },
402
406
{ "fetch" , cmd_fetch , RUN_SETUP },
403
- { "fetch-pack" , cmd_fetch_pack , RUN_SETUP },
407
+ { "fetch-pack" , cmd_fetch_pack , RUN_SETUP | NO_PARSEOPT },
404
408
{ "fmt-merge-msg" , cmd_fmt_merge_msg , RUN_SETUP },
405
409
{ "for-each-ref" , cmd_for_each_ref , RUN_SETUP },
406
410
{ "format-patch" , cmd_format_patch , RUN_SETUP },
407
411
{ "fsck" , cmd_fsck , RUN_SETUP },
408
412
{ "fsck-objects" , cmd_fsck , RUN_SETUP },
409
413
{ "gc" , cmd_gc , RUN_SETUP },
410
- { "get-tar-commit-id" , cmd_get_tar_commit_id },
414
+ { "get-tar-commit-id" , cmd_get_tar_commit_id , NO_PARSEOPT },
411
415
{ "grep" , cmd_grep , RUN_SETUP_GENTLY },
412
416
{ "hash-object" , cmd_hash_object },
413
417
{ "help" , cmd_help },
414
- { "index-pack" , cmd_index_pack , RUN_SETUP_GENTLY },
418
+ { "index-pack" , cmd_index_pack , RUN_SETUP_GENTLY | NO_PARSEOPT },
415
419
{ "init" , cmd_init_db },
416
420
{ "init-db" , cmd_init_db },
417
421
{ "interpret-trailers" , cmd_interpret_trailers , RUN_SETUP_GENTLY },
418
422
{ "log" , cmd_log , RUN_SETUP },
419
423
{ "ls-files" , cmd_ls_files , RUN_SETUP },
420
424
{ "ls-remote" , cmd_ls_remote , RUN_SETUP_GENTLY },
421
425
{ "ls-tree" , cmd_ls_tree , RUN_SETUP },
422
- { "mailinfo" , cmd_mailinfo , RUN_SETUP_GENTLY },
423
- { "mailsplit" , cmd_mailsplit },
426
+ { "mailinfo" , cmd_mailinfo , RUN_SETUP_GENTLY | NO_PARSEOPT },
427
+ { "mailsplit" , cmd_mailsplit , NO_PARSEOPT },
424
428
{ "merge" , cmd_merge , RUN_SETUP | NEED_WORK_TREE },
425
429
{ "merge-base" , cmd_merge_base , RUN_SETUP },
426
430
{ "merge-file" , cmd_merge_file , RUN_SETUP_GENTLY },
427
- { "merge-index" , cmd_merge_index , RUN_SETUP },
428
- { "merge-ours" , cmd_merge_ours , RUN_SETUP },
429
- { "merge-recursive" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE },
430
- { "merge-recursive-ours" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE },
431
- { "merge-recursive-theirs" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE },
432
- { "merge-subtree" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE },
433
- { "merge-tree" , cmd_merge_tree , RUN_SETUP },
434
- { "mktag" , cmd_mktag , RUN_SETUP },
431
+ { "merge-index" , cmd_merge_index , RUN_SETUP | NO_PARSEOPT },
432
+ { "merge-ours" , cmd_merge_ours , RUN_SETUP | NO_PARSEOPT },
433
+ { "merge-recursive" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE | NO_PARSEOPT },
434
+ { "merge-recursive-ours" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE | NO_PARSEOPT },
435
+ { "merge-recursive-theirs" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE | NO_PARSEOPT },
436
+ { "merge-subtree" , cmd_merge_recursive , RUN_SETUP | NEED_WORK_TREE | NO_PARSEOPT },
437
+ { "merge-tree" , cmd_merge_tree , RUN_SETUP | NO_PARSEOPT },
438
+ { "mktag" , cmd_mktag , RUN_SETUP | NO_PARSEOPT },
435
439
{ "mktree" , cmd_mktree , RUN_SETUP },
436
440
{ "mv" , cmd_mv , RUN_SETUP | NEED_WORK_TREE },
437
441
{ "name-rev" , cmd_name_rev , RUN_SETUP },
438
442
{ "notes" , cmd_notes , RUN_SETUP },
439
443
{ "pack-objects" , cmd_pack_objects , RUN_SETUP },
440
- { "pack-redundant" , cmd_pack_redundant , RUN_SETUP },
444
+ { "pack-redundant" , cmd_pack_redundant , RUN_SETUP | NO_PARSEOPT },
441
445
{ "pack-refs" , cmd_pack_refs , RUN_SETUP },
442
- { "patch-id" , cmd_patch_id , RUN_SETUP_GENTLY },
446
+ { "patch-id" , cmd_patch_id , RUN_SETUP_GENTLY | NO_PARSEOPT },
443
447
{ "pickaxe" , cmd_blame , RUN_SETUP },
444
448
{ "prune" , cmd_prune , RUN_SETUP },
445
449
{ "prune-packed" , cmd_prune_packed , RUN_SETUP },
@@ -450,14 +454,14 @@ static struct cmd_struct commands[] = {
450
454
{ "receive-pack" , cmd_receive_pack },
451
455
{ "reflog" , cmd_reflog , RUN_SETUP },
452
456
{ "remote" , cmd_remote , RUN_SETUP },
453
- { "remote-ext" , cmd_remote_ext },
454
- { "remote-fd" , cmd_remote_fd },
457
+ { "remote-ext" , cmd_remote_ext , NO_PARSEOPT },
458
+ { "remote-fd" , cmd_remote_fd , NO_PARSEOPT },
455
459
{ "repack" , cmd_repack , RUN_SETUP },
456
460
{ "replace" , cmd_replace , RUN_SETUP },
457
461
{ "rerere" , cmd_rerere , RUN_SETUP },
458
462
{ "reset" , cmd_reset , RUN_SETUP },
459
- { "rev-list" , cmd_rev_list , RUN_SETUP },
460
- { "rev-parse" , cmd_rev_parse },
463
+ { "rev-list" , cmd_rev_list , RUN_SETUP | NO_PARSEOPT },
464
+ { "rev-parse" , cmd_rev_parse , NO_PARSEOPT },
461
465
{ "revert" , cmd_revert , RUN_SETUP | NEED_WORK_TREE },
462
466
{ "rm" , cmd_rm , RUN_SETUP },
463
467
{ "send-pack" , cmd_send_pack , RUN_SETUP },
@@ -468,23 +472,23 @@ static struct cmd_struct commands[] = {
468
472
{ "stage" , cmd_add , RUN_SETUP | NEED_WORK_TREE },
469
473
{ "status" , cmd_status , RUN_SETUP | NEED_WORK_TREE },
470
474
{ "stripspace" , cmd_stripspace },
471
- { "submodule--helper" , cmd_submodule__helper , RUN_SETUP | SUPPORT_SUPER_PREFIX },
475
+ { "submodule--helper" , cmd_submodule__helper , RUN_SETUP | SUPPORT_SUPER_PREFIX | NO_PARSEOPT },
472
476
{ "symbolic-ref" , cmd_symbolic_ref , RUN_SETUP },
473
477
{ "tag" , cmd_tag , RUN_SETUP | DELAY_PAGER_CONFIG },
474
- { "unpack-file" , cmd_unpack_file , RUN_SETUP },
475
- { "unpack-objects" , cmd_unpack_objects , RUN_SETUP },
478
+ { "unpack-file" , cmd_unpack_file , RUN_SETUP | NO_PARSEOPT },
479
+ { "unpack-objects" , cmd_unpack_objects , RUN_SETUP | NO_PARSEOPT },
476
480
{ "update-index" , cmd_update_index , RUN_SETUP },
477
481
{ "update-ref" , cmd_update_ref , RUN_SETUP },
478
482
{ "update-server-info" , cmd_update_server_info , RUN_SETUP },
479
- { "upload-archive" , cmd_upload_archive },
480
- { "upload-archive--writer" , cmd_upload_archive_writer },
481
- { "var" , cmd_var , RUN_SETUP_GENTLY },
483
+ { "upload-archive" , cmd_upload_archive , NO_PARSEOPT },
484
+ { "upload-archive--writer" , cmd_upload_archive_writer , NO_PARSEOPT },
485
+ { "var" , cmd_var , RUN_SETUP_GENTLY | NO_PARSEOPT },
482
486
{ "verify-commit" , cmd_verify_commit , RUN_SETUP },
483
487
{ "verify-pack" , cmd_verify_pack },
484
488
{ "verify-tag" , cmd_verify_tag , RUN_SETUP },
485
489
{ "version" , cmd_version },
486
490
{ "whatchanged" , cmd_whatchanged , RUN_SETUP },
487
- { "worktree" , cmd_worktree , RUN_SETUP },
491
+ { "worktree" , cmd_worktree , RUN_SETUP | NO_PARSEOPT },
488
492
{ "write-tree" , cmd_write_tree , RUN_SETUP },
489
493
};
490
494
@@ -504,11 +508,15 @@ int is_builtin(const char *s)
504
508
return !!get_builtin (s );
505
509
}
506
510
507
- static void list_builtins (void )
511
+ static void list_builtins (unsigned int exclude_option , char sep )
508
512
{
509
513
int i ;
510
- for (i = 0 ; i < ARRAY_SIZE (commands ); i ++ )
511
- printf ("%s\n" , commands [i ].cmd );
514
+ for (i = 0 ; i < ARRAY_SIZE (commands ); i ++ ) {
515
+ if (exclude_option &&
516
+ (commands [i ].option & exclude_option ))
517
+ continue ;
518
+ printf ("%s%c" , commands [i ].cmd , sep );
519
+ }
512
520
}
513
521
514
522
#ifdef STRIP_EXTENSION
0 commit comments