bisect--helper: introduce new decide_next()
function
Let's refactor code from bisect_next_check() into a new decide_next() helper function. This removes some goto statements and makes the code simpler, clearer and easier to understand. While at it `bad_ref` and `good_glob` are not const any more to void casting them inside `free()`. Mentored-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com> Signed-off-by: Miriam Rubio <mirucam@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b8e3b2f339
commit
bfacfce7d9
@ -291,26 +291,14 @@ static const char need_bisect_start_warning[] =
|
||||
"You then need to give me at least one %s and %s revision.\n"
|
||||
"You can use \"git bisect %s\" and \"git bisect %s\" for that.");
|
||||
|
||||
static int bisect_next_check(const struct bisect_terms *terms,
|
||||
const char *current_term)
|
||||
static int decide_next(const struct bisect_terms *terms,
|
||||
const char *current_term, int missing_good,
|
||||
int missing_bad)
|
||||
{
|
||||
int missing_good = 1, missing_bad = 1, res = 0;
|
||||
const char *bad_ref = xstrfmt("refs/bisect/%s", terms->term_bad);
|
||||
const char *good_glob = xstrfmt("%s-*", terms->term_good);
|
||||
|
||||
if (ref_exists(bad_ref))
|
||||
missing_bad = 0;
|
||||
|
||||
for_each_glob_ref_in(mark_good, good_glob, "refs/bisect/",
|
||||
(void *) &missing_good);
|
||||
|
||||
if (!missing_good && !missing_bad)
|
||||
goto finish;
|
||||
|
||||
if (!current_term) {
|
||||
res = -1;
|
||||
goto finish;
|
||||
}
|
||||
return 0;
|
||||
if (!current_term)
|
||||
return -1;
|
||||
|
||||
if (missing_good && !missing_bad &&
|
||||
!strcmp(current_term, terms->term_good)) {
|
||||
@ -321,7 +309,7 @@ static int bisect_next_check(const struct bisect_terms *terms,
|
||||
*/
|
||||
warning(_("bisecting only with a %s commit"), terms->term_bad);
|
||||
if (!isatty(0))
|
||||
goto finish;
|
||||
return 0;
|
||||
/*
|
||||
* TRANSLATORS: Make sure to include [Y] and [n] in your
|
||||
* translation. The program will only accept English input
|
||||
@ -329,21 +317,35 @@ static int bisect_next_check(const struct bisect_terms *terms,
|
||||
*/
|
||||
yesno = git_prompt(_("Are you sure [Y/n]? "), PROMPT_ECHO);
|
||||
if (starts_with(yesno, "N") || starts_with(yesno, "n"))
|
||||
res = -1;
|
||||
goto finish;
|
||||
}
|
||||
if (!is_empty_or_missing_file(git_path_bisect_start())) {
|
||||
res = error(_(need_bad_and_good_revision_warning),
|
||||
vocab_bad, vocab_good, vocab_bad, vocab_good);
|
||||
} else {
|
||||
res = error(_(need_bisect_start_warning),
|
||||
vocab_good, vocab_bad, vocab_good, vocab_bad);
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
finish:
|
||||
free((void *) good_glob);
|
||||
free((void *) bad_ref);
|
||||
return res;
|
||||
if (!is_empty_or_missing_file(git_path_bisect_start()))
|
||||
return error(_(need_bad_and_good_revision_warning),
|
||||
vocab_bad, vocab_good, vocab_bad, vocab_good);
|
||||
else
|
||||
return error(_(need_bisect_start_warning),
|
||||
vocab_good, vocab_bad, vocab_good, vocab_bad);
|
||||
}
|
||||
|
||||
static int bisect_next_check(const struct bisect_terms *terms,
|
||||
const char *current_term)
|
||||
{
|
||||
int missing_good = 1, missing_bad = 1;
|
||||
char *bad_ref = xstrfmt("refs/bisect/%s", terms->term_bad);
|
||||
char *good_glob = xstrfmt("%s-*", terms->term_good);
|
||||
|
||||
if (ref_exists(bad_ref))
|
||||
missing_bad = 0;
|
||||
|
||||
for_each_glob_ref_in(mark_good, good_glob, "refs/bisect/",
|
||||
(void *) &missing_good);
|
||||
|
||||
free(good_glob);
|
||||
free(bad_ref);
|
||||
|
||||
return decide_next(terms, current_term, missing_good, missing_bad);
|
||||
}
|
||||
|
||||
static int get_terms(struct bisect_terms *terms)
|
||||
|
Loading…
Reference in New Issue
Block a user