On Tue, May 24, 2016 at 9:21 AM, Pranit Bauva <pranit.bauva@xxxxxxxxx> wrote: > Reimplement the `write_terms` shell function in C and add a `write-terms` > subcommand to `git bisect--helper` to call it from git-bisect.sh . Also > remove the subcommand `--check-term-format` as it can now be called from > inside the function write_terms() C implementation. > > Also `|| exit` is added when calling write-terms subcommand from > git-bisect.sh so as to exit whenever there is an error. > > Using `--write-terms` subcommand is a temporary measure to port shell > function to C so as to use the existing test suite. As more functions > are ported, this subcommand will be retired and will be called by some > other method. > > Mentored-by: Lars Schneider <larsxschneider@xxxxxxxxx> > Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx> > Signed-off-by: Pranit Bauva <pranit.bauva@xxxxxxxxx> > --- > builtin/bisect--helper.c | 36 +++++++++++++++++++++++++++++------- > git-bisect.sh | 22 +++++++--------------- > 2 files changed, 36 insertions(+), 22 deletions(-) > > diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c > index 3c748d1..91027b0 100644 > --- a/builtin/bisect--helper.c > +++ b/builtin/bisect--helper.c > @@ -4,9 +4,11 @@ > #include "bisect.h" > #include "refs.h" > > +static GIT_PATH_FUNC(git_path_bisect_write_terms, "BISECT_TERMS") > + > static const char * const git_bisect_helper_usage[] = { > N_("git bisect--helper --next-all [--no-checkout]"), > - N_("git bisect--helper --check-term-format <term> <orig_term>"), > + N_("git bisect--helper --write-terms <bad_term> <good_term>"), > NULL > }; > > @@ -56,18 +58,38 @@ static int check_term_format(const char *term, const char *orig_term) > return 0; > } > > +static int write_terms(const char *bad, const char *good) > +{ > + FILE *fp; > + int res; > + > + if (!strcmp(bad, good)) > + return error(_("please use two different terms")); > + > + if (check_term_format(bad, "bad") || check_term_format(good, "good")) > + return -1; > + > + fp = fopen(git_path_bisect_write_terms(), "w"); > + if (!fp) > + return error_errno(_("could not open the file BISECT_TERMS")); > + > + res = fprintf(fp, "%s\n%s\n", bad, good); > + fclose(fp); > + return (res < 0) ? -1 : 0; > +} > + > int cmd_bisect__helper(int argc, const char **argv, const char *prefix) > { > enum { > NEXT_ALL = 1, > - CHECK_TERM_FMT > + WRITE_TERMS > } cmdmode = 0; > int no_checkout = 0; > struct option options[] = { > OPT_CMDMODE(0, "next-all", &cmdmode, > N_("perform 'git bisect next'"), NEXT_ALL), > - OPT_CMDMODE(0, "check-term-format", &cmdmode, > - N_("check format of the term"), CHECK_TERM_FMT), > + OPT_CMDMODE(0, "write-terms", &cmdmode, > + N_("write the terms to .git/BISECT_TERMS"), WRITE_TERMS), > OPT_BOOL(0, "no-checkout", &no_checkout, > N_("update BISECT_HEAD instead of checking out the current commit")), > OPT_END() > @@ -82,10 +104,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix) > switch (cmdmode) { > case NEXT_ALL: > return bisect_next_all(prefix, no_checkout); > - case CHECK_TERM_FMT: > + case WRITE_TERMS: > if (argc != 2) > - die(_("--check-term-format requires two arguments")); > - return check_term_format(argv[0], argv[1]); > + die(_("--write-terms requires two arguments")); > + return write_terms(argv[0], argv[1]); > default: > die("BUG: unknown subcommand '%d'", cmdmode); > } > diff --git a/git-bisect.sh b/git-bisect.sh > index 7d7965d..cd39bd0 100755 > --- a/git-bisect.sh > +++ b/git-bisect.sh > @@ -210,7 +210,7 @@ bisect_start() { > eval "$eval true" && > if test $must_write_terms -eq 1 > then > - write_terms "$TERM_BAD" "$TERM_GOOD" > + git bisect--helper --write-terms "$TERM_BAD" "$TERM_GOOD" || exit This `|| exit` is not needed because... > fi && > echo "git bisect start$orig_args" >>"$GIT_DIR/BISECT_LOG" || exit ... there is an `|| exit` on the line above (which is chained using `&&` to the previous lines). -- 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