Convert the code literally without changing its design even though it seems that its obscure as to the use of comparing revision to different bisect arguments which seems like a problem in shell because of the way function arguments are handled. The argument handling is kind of hard coded right now because it is not really be meant to be used like this and this is just for testing purposes whether this new method is as functional as its counter part. The shell counter part of the method has been retained for historical purposes. Signed-off-by: Pranit Bauva <pranit.bauva@xxxxxxxxx> --- builtin/bisect--helper.c | 37 +++++++++++++++++++++++++++++++++++++ git-bisect.sh | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index 3324229..6cdae82 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -2,27 +2,64 @@ #include "cache.h" #include "parse-options.h" #include "bisect.h" +#include "refs.h" static const char * const git_bisect_helper_usage[] = { N_("git bisect--helper --next-all [--no-checkout]"), + N_("git bisect--helper --check-term-format <term> <revision>"), NULL }; +static int check_term_format(const char *term, const char *revision, int flags); + +static int check_term_format(const char *term, const char *revision, int flag) { + if (check_refname_format(term, flag)) + die("'%s' is not a valid term", term); + + if (!strcmp(term, "help") || !strcmp(term, "start") || + !strcmp(term, "skip") || !strcmp(term, "next") || + !strcmp(term, "reset") || !strcmp(term, "visualize") || + !strcmp(term, "replay") || !strcmp(term, "log") || + !strcmp(term, "run")) + die("can't use the builtin command '%s' as a term", term); + + if (!strcmp(term, "bad") || !strcmp(term, "new")) + if(strcmp(revision, "bad")) + die("can't change the meaning of term '%s'", term); + + if (!strcmp(term, "good") || !strcmp(term, "old")) + if (strcmp(revision, "good")) + die("can't change the meaning of term '%s'", term); + + return 0; +} + int cmd_bisect__helper(int argc, const char **argv, const char *prefix) { int next_all = 0; int no_checkout = 0; + const char *term; struct option options[] = { OPT_BOOL(0, "next-all", &next_all, N_("perform 'git bisect next'")), OPT_BOOL(0, "no-checkout", &no_checkout, N_("update BISECT_HEAD instead of checking out the current commit")), + OPT_STRING(0, "check-term-format", &term, N_("term"), + N_("check the format of the ref")), OPT_END() }; argc = parse_options(argc, argv, prefix, options, git_bisect_helper_usage, 0); + + if (term != NULL) { + if (argc > 0) + return check_term_format(term, argv[0], 0); + else + die("no revision provided with check_for_term"); + } + if (!next_all) usage_with_options(git_bisect_helper_usage, options); diff --git a/git-bisect.sh b/git-bisect.sh index 5d1cb00..ea237be 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -564,8 +564,8 @@ write_terms () { then die "$(gettext "please use two different terms")" fi - check_term_format "$TERM_BAD" bad - check_term_format "$TERM_GOOD" good + git bisect--helper --check-term-format="$TERM_BAD" bad + git bisect--helper --check-term-format="$TERM_GOOD" good printf '%s\n%s\n' "$TERM_BAD" "$TERM_GOOD" >"$GIT_DIR/BISECT_TERMS" } -- https://github.com/git/git/pull/216 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html