Skip to content

pr-686/alipman88/bisect_first_parent_final_draft-v1

I've always wished git bisect had a first-parent flag, e.g. "git bisect
start --first-parent"

This option would be particularly useful in avoiding false positives when
bisecting, if a merged branch contained broken or non-buildable commits, but
the merge itself was OK.

There have been a couple attempts/iterations towards this functionality in
the past two years or so, and I'd like to get this across the finish line.

The previous iterations have focussed on the preliminary step of editing
functions in bisect.c to accept a first_parent_only parameter, enabling the
--bisect and --first-parent flags to be used in conjunction with git
rev-list. In addition to updating git rev-list, I intend to enable the
--first-parent flag on git bisect as well.

I've taken some of the feedback from previous iterations into account,
specifically tidying up the code that assigns weights to commits in
do_find_bisection(), utilizing existing commit graphs when running tests,
and clarifying the test for "git rev-list --bisect-all --first-parent"

Previous two iterations (most recent first):
https://lore.kernel.org/git/20191105052141.15913-1-workingjubilee@gmail.com/
https://lore.kernel.org/git/20180828123234.44582-1-tiagonbotelho@hotmail.com/

Related discussion about combining multiple boolean params passed to
find_bisection() into a single unsigned integer:
https://lore.kernel.org/git/20180415085841.1269-1-haraldnordgren@gmail.com/

Aaron Lipman (3):
  rev-list: allow bisect and first-parent flags
  bisect: introduce first-parent flag
  bisect: combine args passed to find_bisection()

 Documentation/git-bisect.txt       | 13 +++++-
 Documentation/rev-list-options.txt |  7 ++--
 bisect.c                           | 66 +++++++++++++++++++++---------
 bisect.h                           |  7 +++-
 builtin/bisect--helper.c           | 16 ++++++--
 builtin/rev-list.c                 |  9 +++-
 revision.c                         |  3 --
 t/t6000-rev-list-misc.sh           |  4 +-
 t/t6002-rev-list-bisect.sh         | 45 ++++++++++++++++++++
 t/t6030-bisect-porcelain.sh        | 17 ++++++++
 10 files changed, 151 insertions(+), 36 deletions(-)

base-commit: 00a7a21b97a47889cf66de32f8defed023c14c2c

Submitted-As: https://lore.kernel.org/git/pull.686.git.1595951056.gitgitgadget@gmail.com
Assets 2