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 <[email protected]>
---
 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to