Re: [PATCH v4 2/2] bisect: add --reset-when-found to leave when done
Junio C Hamano <[email protected]> Sat, 01 Aug 2026 14:40:31 -0700
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
Junio C Hamano <[email protected]> writes: > The defer_reset arrangement looks somewhat ugly even though what it > achieves may be a worthy thing to do. Is the only code path that > passes defer_reset==true down the call chain the bisect_run() > codepath, to give that single caller a chance to close files that > bisect_reset() would remove by calling bisect_clean_state()? > > I am wondering if the result of solving it slightly differently may > give us cleaner and easier to follow code, namely, we stop calling > bisect_clean_state() from bisect_reset(). Of course you would need > to find different place to call bisect_clean_state() to compensate, > if we go that route, but how many code paths do we have that depends > on bisect_reset() calling biesct_clean_state()? Conceptually, what you want out of this new feature is: Please run "git bisect <anything>" normally. Make sure you notice when the command completed and found the culprit, And when you notice it, run "git bisect reset" (or "git bisect reset <oid-of-bad-commit>"). Stepping back even further, shouldn't this be doable *a* *lot* simpler, given that existing code does not locally exit(0)? Wouldn't it be the matter of - Add --reset-when-finished option parsing to the main command and the subcommands that want to parse it. - Make sure all indivudual cmd_bisect__<subcommand> returns the result code, instead of calling exit(), and the result code includes those INTERNAL ones. - Tweak bisect_next_all() to report the found commit when it returns BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND. Perhaps bisect_next() can leave it in a file-scope static variable. - Instead of doing return is_bisect_success(res) ? 0 : -res; at the end of cmd_bisect(), if "--reset-when-finished" is in effect, also react to BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND and use the commit bisect_next() received from bisect_next_all() as needed and do what bisect_reset() does. Presumably at that point, files that are problematic on Windows would all already been closed, right? That way, almost all the changes needed to cmd_bisect__<subcommand> and below will be pure clean-up changes. Hmm?