From: george espinoza <gespinoz2019@xxxxxxxxx> This command currently handles its own argv so by teaching it to use parse-options instead we can standardize the way commands handle user input across the project. As a consequence of using OPT_BOOL data structure on --normalize & --refspec-pattern, --no-normalize & --no-refspec-pattern has been can now be used. NO_PARSEOPT flag was also removed to update git.c with the conversion of the structure in this command. This is a rough draft and I need some advice if I'm doing this correctly since its being built but it is failing tests. Helped by: emily shaffer <emilyshaffer@xxxxxxxxxx> Helped by: johannes schindelin <johannes.schindelin@xxxxxx> Signed-off-by: george espinoza <gespinoz2019@xxxxxxxxx> --- builtin/check-ref-format.c | 49 +++++++++++++++++++------------------- git.c | 2 +- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c index bc67d3f0a8..3fe0b5410a 100644 --- a/builtin/check-ref-format.c +++ b/builtin/check-ref-format.c @@ -6,10 +6,13 @@ #include "refs.h" #include "builtin.h" #include "strbuf.h" +#include "parse-options.h" -static const char builtin_check_ref_format_usage[] = -"git check-ref-format [--normalize] [<options>] <refname>\n" -" or: git check-ref-format --branch <branchname-shorthand>"; +static const char * const builtin_check_ref_format_usage[] = { + N_("git check-ref-format [--normalize] [<options>] <refname>\n"), + N_(" or: git check-ref-format --branch <branchname-shorthand>"), + NULL, +}; /* * Return a copy of refname but with leading slashes removed and runs @@ -53,31 +56,29 @@ static int check_ref_format_branch(const char *arg) int cmd_check_ref_format(int argc, const char **argv, const char *prefix) { - int i; - int normalize = 0; + enum { + CHECK_REF_FORMAT_BRANCH, + }; + + int i = 0; + int verbose; + int normalize; + int allow_onelevel; + int refspec_pattern; int flags = 0; const char *refname; - if (argc == 2 && !strcmp(argv[1], "-h")) - usage(builtin_check_ref_format_usage); - - if (argc == 3 && !strcmp(argv[1], "--branch")) - return check_ref_format_branch(argv[2]); + struct option options[] = { + OPT__VERBOSE(&verbose, N_("be verbose")), + OPT_GROUP(""), + OPT_CMDMODE( 0 , "branch", &check_ref_format_branch, N_("branch"), CHECK_REF_FORMAT_BRANCH), + OPT_BOOL( 0 , "normalize", &normalize, N_("normalize tracked files")), + OPT_BOOL( 0 , "allow-onelevel", &allow_onelevel, N_("allow one level")), + OPT_BOOL( 0 , "refspec-pattern", &refspec_pattern, N_("refspec pattern")), + OPT_END(), + }; - for (i = 1; i < argc && argv[i][0] == '-'; i++) { - if (!strcmp(argv[i], "--normalize") || !strcmp(argv[i], "--print")) - normalize = 1; - else if (!strcmp(argv[i], "--allow-onelevel")) - flags |= REFNAME_ALLOW_ONELEVEL; - else if (!strcmp(argv[i], "--no-allow-onelevel")) - flags &= ~REFNAME_ALLOW_ONELEVEL; - else if (!strcmp(argv[i], "--refspec-pattern")) - flags |= REFNAME_REFSPEC_PATTERN; - else - usage(builtin_check_ref_format_usage); - } - if (! (i == argc - 1)) - usage(builtin_check_ref_format_usage); + argc = parse_options(argc, argv, prefix, options, builtin_check_ref_format_usage, PARSE_OPT_KEEP_ARGV0); refname = argv[i]; if (normalize) diff --git a/git.c b/git.c index ce6ab0ece2..13dbfde31c 100644 --- a/git.c +++ b/git.c @@ -478,7 +478,7 @@ static struct cmd_struct commands[] = { { "check-attr", cmd_check_attr, RUN_SETUP }, { "check-ignore", cmd_check_ignore, RUN_SETUP | NEED_WORK_TREE }, { "check-mailmap", cmd_check_mailmap, RUN_SETUP }, - { "check-ref-format", cmd_check_ref_format, NO_PARSEOPT }, + { "check-ref-format", cmd_check_ref_format }, { "checkout", cmd_checkout, RUN_SETUP | NEED_WORK_TREE }, { "checkout-index", cmd_checkout_index, RUN_SETUP | NEED_WORK_TREE}, -- gitgitgadget