This reverts commit aef7d75e5809eda765bbe407c7f8e0f8617f0fd0. The change breaks git bundle command. Running any subcommand results with: $ git bundle create Segmentation fault (core dumped) After reverting the change, everything works correctly. --- builtin/bundle.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/builtin/bundle.c b/builtin/bundle.c index c12c09f854..d9b46f8e03 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -206,19 +206,30 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix) int cmd_bundle(int argc, const char **argv, const char *prefix) { - parse_opt_subcommand_fn *fn = NULL; struct option options[] = { - OPT_SUBCOMMAND("create", &fn, cmd_bundle_create), - OPT_SUBCOMMAND("verify", &fn, cmd_bundle_verify), - OPT_SUBCOMMAND("list-heads", &fn, cmd_bundle_list_heads), - OPT_SUBCOMMAND("unbundle", &fn, cmd_bundle_unbundle), OPT_END() }; + int result; argc = parse_options(argc, argv, prefix, options, builtin_bundle_usage, - 0); + PARSE_OPT_STOP_AT_NON_OPTION); packet_trace_identity("bundle"); - return !!fn(argc, argv, prefix); + if (argc < 2) + usage_with_options(builtin_bundle_usage, options); + + else if (!strcmp(argv[0], "create")) + result = cmd_bundle_create(argc, argv, prefix); + else if (!strcmp(argv[0], "verify")) + result = cmd_bundle_verify(argc, argv, prefix); + else if (!strcmp(argv[0], "list-heads")) + result = cmd_bundle_list_heads(argc, argv, prefix); + else if (!strcmp(argv[0], "unbundle")) + result = cmd_bundle_unbundle(argc, argv, prefix); + else { + error(_("Unknown subcommand: %s"), argv[0]); + usage_with_options(builtin_bundle_usage, options); + } + return result ? 1 : 0; } -- 2.38.1