For some bisection tasks, checking out the commit at each stage of the bisection process is unecessary or undesirable.
This series adds support for a --no-checkout[=<ref>] option to git-bisect.
If specified, this option causes git-bisect to update the specified reference at each stage of the bisection process instead of checking out the commit at that point. If <ref> is not specified, HEAD is assumed.
One application of this option is to find, within a partially damaged repository, the earliest commit such that the graph of commits, trees and blobs reachable from the parents of that commit is completely reachable.
For example:
git bisect start HEAD <known-good-commit> [ <damaged-or-missing-commit> ... ]
git bisect run eval '
git rev-list --objects HEAD > /dev/null &&
git rev-list --objects HEAD | git pack-objects --stdout >/dev/null ||
false'Assuming this git bisect run completes successfully, bisect/bad will refer to the first commit whose parents have completely reachable graphs.
This series is a reworking of an earlier series "bisect: allow git bisect to be used with repos containing damaged trees." that incorporates Junio's suggestion to add a --no-checkout option instead of an --ignore-checkout-failure option.
Jon Seymour (5):
bisect: add tests to document expected behaviour in presence of
broken trees.
bisect: introduce support for --no-checkout=<ref> option.
bisect: introduce --no-checkout[=<ref>] support into porcelain.
bisect: add tests for the --no-checkout option.
bisect: add documentation for --no-checkout[=<ref>] option. Documentation/git-bisect.txt | 26 ++++++++-
bisect.c | 26 +++++++-
bisect.h | 2 +-
builtin/bisect--helper.c | 7 ++-
git-bisect.sh | 45 ++++++++++++--
t/t6030-bisect-porcelain.sh | 132 ++++++++++++++++++++++++++++++++++++++++++
6 files changed, 223 insertions(+), 15 deletions(-)