From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Sixt <j6t@kdbg.org>, Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v3 0/2] bisect: add --auto-reset to leave when done
Date: Mon, 20 Jul 2026 09:10:17 +0000 [thread overview]
Message-ID: <pull.2335.v3.git.git.1784538619.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2335.v2.git.git.1784312854.gitgitgadget@gmail.com>
Add a --reset-when-found option to git bisect that resets the bisect session
when culprit is found.
Changes in v3:
* Rename --auto-reset to --reset-when-found, including internal names.
* Defer git bisect run cleanup until captured output is printed and
BISECT_RUN is closed. Drop the open-descriptor preparatory change,
retaining the existing filename-based output handling.
Changes in v2:
* Add option --auto-reset[=<where>] with option to go to final commit as
well as original.
* Refactored tests.
Harald Nordgren (2):
bisect: let bisect_reset() optionally check out quietly
bisect: add --reset-when-found to leave when done
Documentation/git-bisect.adoc | 14 +++-
bisect.c | 2 +
builtin/bisect.c | 146 +++++++++++++++++++++++++++++-----
t/t6030-bisect-porcelain.sh | 109 +++++++++++++++++++++++++
4 files changed, 250 insertions(+), 21 deletions(-)
base-commit: 41365c2a9ba347870b80881c0d67454edd22fd49
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2335%2FHaraldNordgren%2Fbisect-auto-reset-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2335/HaraldNordgren/bisect-auto-reset-v3
Pull-Request: https://github.com/git/git/pull/2335
Range-diff vs v2:
1: 0de8b12f65 < -: ---------- bisect: read run output from the open descriptor
2: 8a2dcdf305 = 1: 59920c51ae bisect: let bisect_reset() optionally check out quietly
3: 5b3704fbd4 ! 2: 542f4b2c80 bisect: add --auto-reset to leave when done
@@ Metadata
Author: Harald Nordgren <haraldnordgren@gmail.com>
## Commit message ##
- bisect: add --auto-reset to leave when done
+ bisect: add --reset-when-found to leave when done
When a bisection finishes, "git bisect" reports the first bad commit
but leaves the session active until "git bisect reset" is run by hand.
- Add an "--auto-reset[=<where>]" option, accepted by both "git bisect
- start" and "git bisect run", that resets as soon as the first bad commit
- is found. The "original" value returns to the commit checked out before
- "git bisect start", while "found" leaves the first bad commit checked
- out; omitting the value defaults to "original".
+ Add a "--reset-when-found[=<where>]" option, accepted by both "git
+ bisect start" and "git bisect run", that resets as soon as the first
+ bad commit is found. The "original" value returns to the commit checked
+ out before "git bisect start", while "found" leaves the first bad commit
+ checked out; omitting the value defaults to "original".
- Persist the selected target in a BISECT_AUTO_RESET state file and perform
- the reset quietly. Reject this option together with "--no-checkout",
- since that mode must not check out either target.
+ Persist the selected target in a BISECT_RESET_WHEN_FOUND state file
+ and perform the reset quietly.
+
+ For "git bisect run", defer the reset until after the captured output
+ is printed and BISECT_RUN is closed. This lets cleanup remove the file
+ on systems that cannot unlink an open file.
+
+ Reject this option together with "--no-checkout", since that mode must
+ not check out either target.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
@@ Documentation/git-bisect.adoc: SYNOPSIS
[synopsis]
git bisect start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>]
- [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]
-+ [--no-checkout] [--first-parent] [--auto-reset[=<where>]] [<bad> [<good>...]] [--] [<pathspec>...]
++ [--no-checkout] [--first-parent] [--reset-when-found[=<where>]] [<bad> [<good>...]] [--] [<pathspec>...]
git bisect (bad|new|<term-new>) [<rev>]
git bisect (good|old|<term-old>) [<rev>...]
git bisect terms [--term-(good|old) | --term-(bad|new)]
@@ Documentation/git-bisect.adoc: git bisect reset [<commit>]
git bisect replay <logfile>
git bisect log
-git bisect run <cmd> [<arg>...]
-+git bisect run [--auto-reset[=<where>]] <cmd> [<arg>...]
++git bisect run [--reset-when-found[=<where>]] <cmd> [<arg>...]
git bisect help
DESCRIPTION
@@ Documentation/git-bisect.adoc: ignored.
This option is particularly useful in avoiding false positives when a merged
branch contained broken or non-buildable commits, but the merge itself was OK.
-+`--auto-reset[=<where>]`::
++`--reset-when-found[=<where>]`::
+ Once the first bad commit is found, report it and clean up the
+ bisection state. `<where>` may be `original` to return to the commit
+ checked out before `git bisect start`, or `found` to leave the first
@@ bisect.c: static GIT_PATH_FUNC(git_path_bisect_start, "BISECT_START")
static GIT_PATH_FUNC(git_path_bisect_log, "BISECT_LOG")
static GIT_PATH_FUNC(git_path_bisect_terms, "BISECT_TERMS")
static GIT_PATH_FUNC(git_path_bisect_first_parent, "BISECT_FIRST_PARENT")
-+static GIT_PATH_FUNC(git_path_bisect_auto_reset, "BISECT_AUTO_RESET")
++static GIT_PATH_FUNC(git_path_bisect_reset_when_found, "BISECT_RESET_WHEN_FOUND")
static void read_bisect_paths(struct strvec *array)
{
@@ bisect.c: int bisect_clean_state(void)
unlink_or_warn(git_path_bisect_run());
unlink_or_warn(git_path_bisect_terms());
unlink_or_warn(git_path_bisect_first_parent());
-+ unlink_or_warn(git_path_bisect_auto_reset());
++ unlink_or_warn(git_path_bisect_reset_when_found());
/*
* Cleanup BISECT_START last to support the --no-checkout option
* introduced in the commit 4796e823a.
@@ builtin/bisect.c: static GIT_PATH_FUNC(git_path_bisect_start, "BISECT_START")
static GIT_PATH_FUNC(git_path_bisect_log, "BISECT_LOG")
static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
static GIT_PATH_FUNC(git_path_bisect_first_parent, "BISECT_FIRST_PARENT")
-+static GIT_PATH_FUNC(git_path_bisect_auto_reset, "BISECT_AUTO_RESET")
++static GIT_PATH_FUNC(git_path_bisect_reset_when_found, "BISECT_RESET_WHEN_FOUND")
static GIT_PATH_FUNC(git_path_bisect_run, "BISECT_RUN")
#define BUILTIN_GIT_BISECT_START_USAGE \
N_("git bisect start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>]\n" \
- " [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]")
-+ " [--no-checkout] [--first-parent] [--auto-reset[=<where>]] [<bad> [<good>...]] [--] [<pathspec>...]")
++ " [--no-checkout] [--first-parent] [--reset-when-found[=<where>]] [<bad> [<good>...]] [--] [<pathspec>...]")
#define BUILTIN_GIT_BISECT_BAD_USAGE \
N_("git bisect (bad|new|<term-new>) [<rev>]")
#define BUILTIN_GIT_BISECT_GOOD_USAGE \
@@ builtin/bisect.c: static GIT_PATH_FUNC(git_path_bisect_run, "BISECT_RUN")
"git bisect log"
#define BUILTIN_GIT_BISECT_RUN_USAGE \
- N_("git bisect run <cmd> [<arg>...]")
-+ N_("git bisect run [--auto-reset[=<where>]] <cmd> [<arg>...]")
++ N_("git bisect run [--reset-when-found[=<where>]] <cmd> [<arg>...]")
#define BUILTIN_GIT_BISECT_HELP_USAGE \
"git bisect help"
@@ builtin/bisect.c: static const char * const git_bisect_usage[] = {
NULL
};
-+enum auto_reset_mode {
-+ AUTO_RESET_NONE,
-+ AUTO_RESET_ORIGINAL,
-+ AUTO_RESET_FOUND,
++enum reset_when_found_mode {
++ RESET_WHEN_FOUND_NONE,
++ RESET_WHEN_FOUND_TO_ORIGINAL,
++ RESET_WHEN_FOUND_TO_FOUND,
+};
+
struct add_bisect_ref_data {
@@ builtin/bisect.c: static int bisect_reset(const char *commit, int quiet)
return bisect_clean_state();
}
-+static int parse_auto_reset(const char *value, enum auto_reset_mode *mode)
++static int parse_reset_when_found(const char *value,
++ enum reset_when_found_mode *mode)
+{
+ if (!strcmp(value, "original"))
-+ *mode = AUTO_RESET_ORIGINAL;
++ *mode = RESET_WHEN_FOUND_TO_ORIGINAL;
+ else if (!strcmp(value, "found"))
-+ *mode = AUTO_RESET_FOUND;
++ *mode = RESET_WHEN_FOUND_TO_FOUND;
+ else
-+ return error(_("invalid value for '--auto-reset': '%s'"), value);
++ return error(_("invalid value for '--reset-when-found': '%s'"),
++ value);
+
+ return 0;
+}
+
-+static const char *auto_reset_mode_name(enum auto_reset_mode mode)
++static const char *reset_when_found_mode_name(enum reset_when_found_mode mode)
+{
+ switch (mode) {
-+ case AUTO_RESET_ORIGINAL:
++ case RESET_WHEN_FOUND_TO_ORIGINAL:
+ return "original";
-+ case AUTO_RESET_FOUND:
++ case RESET_WHEN_FOUND_TO_FOUND:
+ return "found";
-+ case AUTO_RESET_NONE:
-+ BUG("no name for unset auto-reset mode");
++ case RESET_WHEN_FOUND_NONE:
++ BUG("no name for unset reset-when-found mode");
+ }
-+ BUG("unknown auto-reset mode %d", mode);
++ BUG("unknown reset-when-found mode %d", mode);
+}
+
-+static int bisect_auto_reset(struct bisect_terms *terms)
++static int bisect_reset_when_found(struct bisect_terms *terms)
+{
+ struct strbuf value = STRBUF_INIT;
-+ enum auto_reset_mode mode;
++ enum reset_when_found_mode mode;
+ char *commit = NULL;
+ int res;
+
-+ if (strbuf_read_file(&value, git_path_bisect_auto_reset(), 0) < 0) {
++ if (strbuf_read_file(&value, git_path_bisect_reset_when_found(), 0) < 0) {
+ res = error_errno(_("could not read '%s'"),
-+ git_path_bisect_auto_reset());
++ git_path_bisect_reset_when_found());
+ goto cleanup;
+ }
+ strbuf_trim(&value);
-+ if (parse_auto_reset(value.buf, &mode)) {
++ if (parse_reset_when_found(value.buf, &mode)) {
+ res = -1;
+ goto cleanup;
+ }
+
-+ if (mode == AUTO_RESET_FOUND)
++ if (mode == RESET_WHEN_FOUND_TO_FOUND)
+ commit = xstrfmt("refs/bisect/%s", terms->term_bad);
+ res = bisect_reset(commit, 1);
+
@@ builtin/bisect.c: static int bisect_reset(const char *commit, int quiet)
static void log_commit(FILE *fp,
const char *fmt, const char *state,
struct commit *commit)
+@@ builtin/bisect.c: static int bisect_successful(struct bisect_terms *terms)
+ return res;
+ }
+
+-static enum bisect_error bisect_next(struct bisect_terms *terms, const char *prefix)
++static enum bisect_error bisect_next(struct bisect_terms *terms,
++ const char *prefix, bool defer_reset)
+ {
+ enum bisect_error res;
+
@@ builtin/bisect.c: static enum bisect_error bisect_next(struct bisect_terms *terms, const char *pre
if (res == BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND) {
res = bisect_successful(terms);
-+ if (!res && !is_empty_or_missing_file(git_path_bisect_auto_reset()))
-+ res = bisect_auto_reset(terms);
++ if (!res && !defer_reset &&
++ !is_empty_or_missing_file(git_path_bisect_reset_when_found()))
++ res = bisect_reset_when_found(terms);
return res ? res : BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND;
} else if (res == BISECT_ONLY_SKIPPED_LEFT) {
res = bisect_skipped_commits(terms);
+@@ builtin/bisect.c: static enum bisect_error bisect_next(struct bisect_terms *terms, const char *pre
+ return res;
+ }
+
+-static enum bisect_error bisect_auto_next(struct bisect_terms *terms, const char *prefix)
++static enum bisect_error bisect_auto_next(struct bisect_terms *terms,
++ const char *prefix, bool defer_reset)
+ {
+ if (bisect_next_check(terms, NULL)) {
+ bisect_print_status(terms);
+ return BISECT_OK;
+ }
+
+- return bisect_next(terms, prefix);
++ return bisect_next(terms, prefix, defer_reset);
+ }
+
+ static enum bisect_error bisect_start(struct bisect_terms *terms, int argc,
@@ builtin/bisect.c: static enum bisect_error bisect_start(struct bisect_terms *terms, int argc,
{
int no_checkout = 0;
int first_parent_only = 0;
-+ enum auto_reset_mode auto_reset = AUTO_RESET_NONE;
++ enum reset_when_found_mode reset_when_found = RESET_WHEN_FOUND_NONE;
int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
int flags, pathspec_pos;
enum bisect_error res = BISECT_OK;
@@ builtin/bisect.c: static enum bisect_error bisect_start(struct bisect_terms *ter
no_checkout = 1;
} else if (!strcmp(arg, "--first-parent")) {
first_parent_only = 1;
-+ } else if (!strcmp(arg, "--auto-reset")) {
-+ auto_reset = AUTO_RESET_ORIGINAL;
-+ } else if (skip_prefix(arg, "--auto-reset=", &arg)) {
-+ if (parse_auto_reset(arg, &auto_reset)) {
++ } else if (!strcmp(arg, "--reset-when-found")) {
++ reset_when_found = RESET_WHEN_FOUND_TO_ORIGINAL;
++ } else if (skip_prefix(arg, "--reset-when-found=", &arg)) {
++ if (parse_reset_when_found(arg, &reset_when_found)) {
+ res = BISECT_FAILED;
+ goto finish;
+ }
@@ builtin/bisect.c: static enum bisect_error bisect_start(struct bisect_terms *ter
break;
}
}
-+ if (auto_reset != AUTO_RESET_NONE && no_checkout) {
-+ res = error(_("'--auto-reset' cannot be used with '--no-checkout'"));
++ if (reset_when_found != RESET_WHEN_FOUND_NONE && no_checkout) {
++ res = error(_("'--reset-when-found' cannot be used with '--no-checkout'"));
+ goto finish;
+ }
pathspec_pos = i;
@@ builtin/bisect.c: static enum bisect_error bisect_start(struct bisect_terms *ter
if (first_parent_only)
write_file(git_path_bisect_first_parent(), "\n");
-+ if (auto_reset != AUTO_RESET_NONE)
-+ write_file(git_path_bisect_auto_reset(), "%s\n",
-+ auto_reset_mode_name(auto_reset));
++ if (reset_when_found != RESET_WHEN_FOUND_NONE)
++ write_file(git_path_bisect_reset_when_found(), "%s\n",
++ reset_when_found_mode_name(reset_when_found));
+
if (no_checkout) {
if (repo_get_oid(the_repository, start_head.buf, &oid) < 0) {
res = error(_("invalid ref: '%s'"), start_head.buf);
+@@ builtin/bisect.c: finish:
+ if (res)
+ return res;
+
+- res = bisect_auto_next(terms, NULL);
++ res = bisect_auto_next(terms, NULL, false);
+ if (!is_bisect_success(res))
+ bisect_clean_state();
+ return res;
+@@ builtin/bisect.c: static int bisect_autostart(struct bisect_terms *terms)
+ }
+
+ static enum bisect_error bisect_state(struct bisect_terms *terms, int argc,
+- const char **argv)
++ const char **argv, bool defer_reset)
+ {
+ const char *state;
+ int i, verify_expected = 1;
+@@ builtin/bisect.c: static enum bisect_error bisect_state(struct bisect_terms *terms, int argc,
+ }
+
+ oid_array_clear(&revs);
+- return bisect_auto_next(terms, NULL);
++ return bisect_auto_next(terms, NULL, defer_reset);
+ }
+
+ static enum bisect_error bisect_log(void)
+@@ builtin/bisect.c: static enum bisect_error bisect_replay(struct bisect_terms *terms, const char *f
+ if (res)
+ return BISECT_FAILED;
+
+- return bisect_auto_next(terms, NULL);
++ return bisect_auto_next(terms, NULL, false);
+ }
+
+ static enum bisect_error bisect_skip(struct bisect_terms *terms, int argc,
+@@ builtin/bisect.c: static enum bisect_error bisect_skip(struct bisect_terms *terms, int argc,
+ strvec_push(&argv_state, argv[i]);
+ }
+ }
+- res = bisect_state(terms, argv_state.nr, argv_state.v);
++ res = bisect_state(terms, argv_state.nr, argv_state.v, false);
+
+ strvec_clear(&argv_state);
+ return res;
@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, const char **argv)
{
int res = BISECT_OK;
struct strbuf command = STRBUF_INIT;
-+ enum auto_reset_mode auto_reset = AUTO_RESET_NONE;
-+ const char *auto_reset_arg;
++ enum reset_when_found_mode reset_when_found = RESET_WHEN_FOUND_NONE;
++ const char *reset_when_found_arg;
const char *new_state;
int temporary_stdout_fd, saved_stdout;
int is_first_run = 1;
@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, co
if (bisect_next_check(terms, NULL))
return BISECT_FAILED;
-+ if (argc && !strcmp(argv[0], "--auto-reset"))
-+ auto_reset = AUTO_RESET_ORIGINAL;
-+ else if (argc && skip_prefix(argv[0], "--auto-reset=", &auto_reset_arg)) {
-+ if (parse_auto_reset(auto_reset_arg, &auto_reset))
++ if (argc && !strcmp(argv[0], "--reset-when-found"))
++ reset_when_found = RESET_WHEN_FOUND_TO_ORIGINAL;
++ else if (argc && skip_prefix(argv[0], "--reset-when-found=",
++ &reset_when_found_arg)) {
++ if (parse_reset_when_found(reset_when_found_arg, &reset_when_found))
+ return BISECT_FAILED;
+ }
+
-+ if (auto_reset != AUTO_RESET_NONE) {
++ if (reset_when_found != RESET_WHEN_FOUND_NONE) {
+ if (refs_ref_exists(get_main_ref_store(the_repository), "BISECT_HEAD"))
-+ return error(_("'--auto-reset' cannot be used with '--no-checkout'"));
-+ write_file(git_path_bisect_auto_reset(), "%s\n",
-+ auto_reset_mode_name(auto_reset));
++ return error(_("'--reset-when-found' cannot be used with '--no-checkout'"));
++ write_file(git_path_bisect_reset_when_found(), "%s\n",
++ reset_when_found_mode_name(reset_when_found));
+ argc--;
+ argv++;
+ }
@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, co
if (!argc) {
error(_("bisect run failed: no command provided."));
return BISECT_FAILED;
+@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, const char **argv)
+ saved_stdout = dup(1);
+ dup2(temporary_stdout_fd, 1);
+
+- res = bisect_state(terms, 1, &new_state);
++ res = bisect_state(terms, 1, &new_state, true);
+
+ fflush(stdout);
+ dup2(saved_stdout, 1);
+@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, const char **argv)
+ res = BISECT_OK;
+ } else if (res == BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND) {
+ printf(_("bisect found first '%s' commit\n"), terms->term_bad);
+- res = BISECT_OK;
++ if (!is_empty_or_missing_file(git_path_bisect_reset_when_found()) &&
++ bisect_reset_when_found(terms))
++ res = BISECT_FAILED;
++ else
++ res = BISECT_OK;
+ } else if (res) {
+ error(_("bisect run failed: 'git bisect %s'"
+ " exited with error code %d"), new_state, res);
+@@ builtin/bisect.c: static int cmd_bisect__next(int argc, const char **argv UNUSED, const char *pref
+ return error(_("'%s' requires 0 arguments"),
+ "git bisect next");
+ get_terms(&terms);
+- res = bisect_next(&terms, prefix);
++ res = bisect_next(&terms, prefix, false);
+ free_terms(&terms);
+ return res;
+ }
+@@ builtin/bisect.c: int cmd_bisect(int argc,
+ !one_of(argv[0], terms.term_good, terms.term_bad, NULL))
+ usage_msg_optf(_("unknown command: '%s'"), git_bisect_usage,
+ options, argv[0]);
+- res = bisect_state(&terms, argc, argv);
++ res = bisect_state(&terms, argc, argv, false);
+ free_terms(&terms);
+ } else {
+ argc--;
## t/t6030-bisect-porcelain.sh ##
@@ t/t6030-bisect-porcelain.sh: test_bisect_usage () {
@@ t/t6030-bisect-porcelain.sh: test_bisect_usage () {
+ git bisect bad
+}
+
-+bisect_run_auto_reset () {
++bisect_run_reset_when_found () {
+ write_script test_script.sh <<-\EOF &&
+ ! grep Another hello >/dev/null
+ EOF
+ git bisect start $HASH4 $HASH2 &&
+ git bisect run "$1" ./test_script.sh >my_bisect_log.txt &&
-+ test_grep "$HASH3 is the first .bad. commit" my_bisect_log.txt
++ test_grep "$HASH3 is the first .bad. commit" my_bisect_log.txt &&
++ test_bisect_state_missing BISECT_RUN
+}
+
-+test_auto_reset_fails () {
++test_reset_when_found_fails () {
+ local pattern="$1" &&
+ local state_file="$2" &&
+ shift 2 &&
@@ t/t6030-bisect-porcelain.sh: test_expect_success '"git bisect run" simple case'
git bisect reset
'
-+test_expect_success '"git bisect start --auto-reset" defaults to original' '
++test_expect_success '"git bisect start --reset-when-found" defaults to original' '
+ test_when_finished "git bisect reset; git checkout main" &&
+ git checkout main &&
-+ bisect_start_and_finish --auto-reset &&
++ bisect_start_and_finish --reset-when-found &&
+ test "$HASH4" = "$(git rev-parse HEAD)" &&
+ test main = "$(git branch --show-current)" &&
+ test_bisect_state_missing BISECT_START &&
+
-+ bisect_start_and_finish --auto-reset=original &&
++ bisect_start_and_finish --reset-when-found=original &&
+ test "$HASH4" = "$(git rev-parse HEAD)" &&
+ test main = "$(git branch --show-current)" &&
+ test_bisect_state_missing BISECT_START
+'
+
-+test_expect_success '"git bisect start --auto-reset=found" leaves first bad checked out' '
++test_expect_success '"git bisect start --reset-when-found=found" leaves first bad checked out' '
+ test_when_finished "git bisect reset; git checkout main" &&
-+ bisect_start_and_finish --auto-reset=found &&
++ bisect_start_and_finish --reset-when-found=found &&
+ test "$HASH3" = "$(git rev-parse HEAD)" &&
+ test_bisect_state_missing BISECT_START
+'
+
-+test_expect_success '"git bisect run --auto-reset" defaults to original' '
++test_expect_success '"git bisect run --reset-when-found" defaults to original' '
+ test_when_finished "git bisect reset; git checkout main" &&
-+ bisect_run_auto_reset --auto-reset &&
++ bisect_run_reset_when_found --reset-when-found &&
+ test "$HASH4" = "$(git rev-parse HEAD)" &&
+ test main = "$(git branch --show-current)" &&
+ test_bisect_state_missing BISECT_START
+'
+
-+test_expect_success '"git bisect run --auto-reset=found" leaves first bad checked out' '
++test_expect_success '"git bisect run --reset-when-found=found" leaves first bad checked out' '
+ test_when_finished "git bisect reset; git checkout main" &&
-+ bisect_run_auto_reset --auto-reset=found &&
++ bisect_run_reset_when_found --reset-when-found=found &&
+ test "$HASH3" = "$(git rev-parse HEAD)" &&
+ test_bisect_state_missing BISECT_START
+'
+
-+test_expect_success '--auto-reset rejects an unknown reset target' '
++test_expect_success '--reset-when-found rejects an unknown reset target' '
+ test_when_finished "git bisect reset; git checkout main" &&
-+ test_auto_reset_fails \
-+ "invalid value for.*--auto-reset.*unknown" BISECT_START \
-+ git bisect start --auto-reset=unknown $HASH4 $HASH2 &&
++ test_reset_when_found_fails \
++ "invalid value for.*--reset-when-found.*unknown" BISECT_START \
++ git bisect start --reset-when-found=unknown $HASH4 $HASH2 &&
+
+ git bisect start $HASH4 $HASH2 &&
-+ test_auto_reset_fails \
-+ "invalid value for.*--auto-reset.*unknown" BISECT_AUTO_RESET \
-+ git bisect run --auto-reset=unknown true
++ test_reset_when_found_fails \
++ "invalid value for.*--reset-when-found.*unknown" \
++ BISECT_RESET_WHEN_FOUND \
++ git bisect run --reset-when-found=unknown true
+'
+
-+test_expect_success '--auto-reset cannot be used with --no-checkout' '
++test_expect_success '--reset-when-found cannot be used with --no-checkout' '
+ test_when_finished "git bisect reset" &&
-+ test_auto_reset_fails \
++ test_reset_when_found_fails \
+ "cannot be used with.*--no-checkout" BISECT_START \
-+ git bisect start --auto-reset=original --no-checkout $HASH4 $HASH2 &&
++ git bisect start --reset-when-found=original --no-checkout $HASH4 $HASH2 &&
+
+ git bisect start --no-checkout $HASH4 $HASH2 &&
-+ test_auto_reset_fails \
-+ "cannot be used with.*--no-checkout" BISECT_AUTO_RESET \
-+ git bisect run --auto-reset=found true
++ test_reset_when_found_fails \
++ "cannot be used with.*--no-checkout" BISECT_RESET_WHEN_FOUND \
++ git bisect run --reset-when-found=found true
+'
+
-+test_expect_success 'without --auto-reset the bisection state is kept' '
++test_expect_success 'without --reset-when-found the bisection state is kept' '
+ test_when_finished "git bisect reset" &&
+ git bisect start $HASH4 $HASH2 &&
+ git bisect bad &&
+ test_bisect_state_file BISECT_START
+'
+
-+test_expect_success '--auto-reset does not leak into a later bisection' '
++test_expect_success '--reset-when-found does not leak into a later bisection' '
+ test_when_finished "git bisect reset; git checkout main" &&
-+ bisect_start_and_finish --auto-reset &&
++ bisect_start_and_finish --reset-when-found &&
+
+ git bisect start $HASH4 $HASH2 &&
+ git bisect bad &&
--
gitgitgadget
next prev parent reply other threads:[~2026-07-20 9:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 5:35 [PATCH 0/3] bisect: add --auto-reset to leave when done Harald Nordgren via GitGitGadget
2026-07-16 5:35 ` [PATCH 1/3] bisect: read run output from the open descriptor Harald Nordgren via GitGitGadget
2026-07-16 5:35 ` [PATCH 2/3] bisect: let bisect_reset() optionally check out quietly Harald Nordgren via GitGitGadget
2026-07-16 5:35 ` [PATCH 3/3] bisect: add --auto-reset to leave when done Harald Nordgren via GitGitGadget
2026-07-16 17:22 ` Junio C Hamano
2026-07-16 21:22 ` Harald Nordgren
2026-07-17 5:00 ` Junio C Hamano
2026-07-17 9:16 ` Harald Nordgren
2026-07-17 16:43 ` Junio C Hamano
2026-07-17 18:27 ` [PATCH v2 0/3] " Harald Nordgren via GitGitGadget
2026-07-17 18:27 ` [PATCH v2 1/3] bisect: read run output from the open descriptor Harald Nordgren via GitGitGadget
2026-07-17 22:42 ` Junio C Hamano
2026-07-18 16:24 ` Johannes Sixt
2026-07-17 18:27 ` [PATCH v2 2/3] bisect: let bisect_reset() optionally check out quietly Harald Nordgren via GitGitGadget
2026-07-17 18:27 ` [PATCH v2 3/3] bisect: add --auto-reset to leave when done Harald Nordgren via GitGitGadget
2026-07-18 16:18 ` Johannes Sixt
2026-07-20 1:14 ` Junio C Hamano
2026-07-20 9:10 ` Harald Nordgren via GitGitGadget [this message]
2026-07-20 9:10 ` [PATCH v3 1/2] bisect: let bisect_reset() optionally check out quietly Harald Nordgren via GitGitGadget
2026-07-20 9:10 ` [PATCH v3 2/2] bisect: add --reset-when-found to leave when done Harald Nordgren via GitGitGadget
2026-07-20 17:20 ` [PATCH v3 0/2] bisect: add --auto-reset " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2335.v3.git.git.1784538619.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=haraldnordgren@gmail.com \
--cc=j6t@kdbg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox