#!/bin/sh
# The tests in test-bisect are done on a linear history.
# Here the following repository history is used for testing:
#
# 17
# |
# 18 16
# \ /
# 15
# / \
# / \
# 10 13
# / \ |
# / \ | 14
# 7 6 9 12 /
# \ / \ | |/
# 4 \ | 11
# \ \ | /
# 3 5 | /
# \ / |/
# 2 8
# \ /
# 1
# |
# 0
set -e
echo % init
hg init
echo % committing changes
echo > a
echo '0' >> a
hg add a
hg ci -m "0" -d "0 0"
echo '1' >> a
hg ci -m "1" -d "1 0"
echo '2' >> a
hg ci -m "2" -d "2 0"
echo '3' >> a
hg ci -m "3" -d "3 0"
echo '4' >> a
hg ci -m "4" -d "4 0"
# create branch
hg up -r 2
echo '5' >> b
hg add b
hg ci -m "5" -d "5 0"
# merge
hg merge
hg ci -m "merge 4,5" -d "6 0"
# create branch
hg up -r 4
echo '7' > c
hg add c
hg ci -m "7" -d "7 0"
# create branch
hg up -r 1
echo '8' > d
hg add d
hg ci -m "8" -d "8 0"
echo '9' >> d
hg ci -m "9" -d "9 0"
# merge
hg merge -r 6
hg ci -m "merge 6,9" -d "10 0"
# create branch
hg up -r 8
echo '11' > e
hg add e
hg ci -m "11" -d "11 0"
echo '12' >> e
hg ci -m "12" -d "12 0"
echo '13' >> e
hg ci -m "13" -d "13 0"
# create branch
hg up -r 11
echo '14' > f
hg add f
hg ci -m "14" -d "14 0"
# merge
hg up -r 13 -C
hg merge -r 10
hg ci -m "merge 10,13" -d "15 0"
echo '16' >> e
hg ci -m "16" -d "16 0"
echo '17' >> e
hg ci -m "17" -d "17 0"
# create branch
hg up -r 15
echo '18' >> e
hg ci -m "18" -d "18 0"
echo % log
hg log
echo % hg up -C
hg up -C
echo % complex bisect test 1 # first bad rev is 9
hg bisect -r
hg bisect -g 0
hg bisect -b 17 # -> update to rev 6
hg bisect -g # -> update to rev 13
hg bisect -s # -> update to rev 10
hg bisect -b # -> update to rev 8
hg bisect -g # -> update to rev 9
hg bisect -b
echo % complex bisect test 2 # first good rev is 13
hg bisect -r
hg bisect -g 18
hg bisect -b 1 # -> update to rev 6
hg bisect -s # -> update to rev 10
hg bisect -b # -> update to rev 12
hg bisect -b # -> update to rev 13
hg bisect -g
echo % complex bisect test 3
# first bad rev is 15
# 10,9,13 are skipped an might be the first bad revisions as well
hg bisect -r
hg bisect -g 1
hg bisect -b 16 # -> update to rev 6
hg bisect -g # -> update to rev 13
hg bisect -s # -> update to rev 10
hg bisect -s # -> update to rev 12
hg bisect -g # -> update to rev 9
hg bisect -s # -> update to rev 15
hg bisect -b
echo % complex bisect test 4
# first good revision is 17
# 15,16 are skipped an might be the first good revisions as well
hg bisect -r
hg bisect -g 17
hg bisect -b 8 # -> update to rev 10
hg bisect -b # -> update to rev 13
hg bisect -b # -> update to rev 15
hg bisect -s # -> update to rev 16
hg bisect -s