[PATCH] Fix bisection terminating condition

When testing bisection and using gitk to visualize the result, it was
obvious that the termination condition was broken.

We know what the bad entry is only when the bisection ends up telling us
to test the known-bad entry again.

Also, add a safety net: if somebody marks as good something that includes
the known-bad point, we now notice and complain, instead of writing an
empty revision to the new bisection branch.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Linus Torvalds 2005-08-30 11:04:39 -07:00 коммит произвёл Junio C Hamano
Родитель 61f01a5b77
Коммит 670f5fe34f
1 изменённых файлов: 6 добавлений и 2 удалений

Просмотреть файл

@ -105,12 +105,16 @@ bisect_next() {
good=$(git-rev-parse --sq --revs-only --not \ good=$(git-rev-parse --sq --revs-only --not \
$(cd "$GIT_DIR" && ls refs/bisect/good-*)) && $(cd "$GIT_DIR" && ls refs/bisect/good-*)) &&
rev=$(eval "git-rev-list --bisect $good $bad") || exit rev=$(eval "git-rev-list --bisect $good $bad") || exit
nr=$(eval "git-rev-list $rev $good" | wc -l) || exit if [ -z "$rev" ]; then
if [ "$nr" -le "1" ]; then echo "$bad was both good and bad"
exit 1
fi
if [ "$rev" = "$bad" ]; then
echo "$rev is first bad commit" echo "$rev is first bad commit"
git-diff-tree --pretty $rev git-diff-tree --pretty $rev
exit 0 exit 0
fi fi
nr=$(eval "git-rev-list $rev $good" | wc -l) || exit
echo "Bisecting: $nr revisions left to test after this" echo "Bisecting: $nr revisions left to test after this"
echo "$rev" > "$GIT_DIR/refs/heads/new-bisect" echo "$rev" > "$GIT_DIR/refs/heads/new-bisect"
git checkout new-bisect || exit git checkout new-bisect || exit