#! /bin/sh

# The build failed for and identifier in the range bwetween LOW and HIGH.
# Find a new patch id to try within that range.
#
# It's meant to be easy to modify the heuristics used to select the
# next patch to try by adding to or rearranging the patches listed in
# MIDLIST.  Known failures are recorded in ${REG_FAILLIST}.
#
# A nifty improvement would be to record known ranges of failure as
# ranges, and then pick revisions just before and just after the range.
#
# Copyright (C) 2006-2023 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# For a copy of the GNU General Public License, write the the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02111-1301, USA.

LOW=$1
HIGH=$2

MIDLIST=""

let MID01=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH
let MID01=MID01/12
let MID02=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH
let MID02=MID02/12
let MID03=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH
let MID03=MID03/12
let MID04=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH
let MID04=MID04/12
let MID05=LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH
let MID05=MID05/12
let MID06=LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID06=MID06/12
let MID07=LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID07=MID07/12
let MID08=LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID08=MID08/12
let MID09=LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID09=MID09/12
let MID10=LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID10=MID10/12
let MID11=LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
let MID11=MID11/12

# Look in this order; MID has already been done:
#
#  LOW--10---7---6---3---2---MID---1---4---5---8---9---HIGH

MIDLIST="${MIDLIST} ${MID07}"
MIDLIST="${MIDLIST} ${MID05}"
MIDLIST="${MIDLIST} ${MID04}"
MIDLIST="${MIDLIST} ${MID08}"
MIDLIST="${MIDLIST} ${MID09}"
MIDLIST="${MIDLIST} ${MID03}"
MIDLIST="${MIDLIST} ${MID02}"
MIDLIST="${MIDLIST} ${MID10}"
MIDLIST="${MIDLIST} ${MID11}"
MIDLIST="${MIDLIST} ${MID01}"

for MID in ${MIDLIST}
do
  # Skip this if it's the low endpoint.
  if [ ${MID} != ${LOW} ]; then
    # Is this patch already known to fail?
    ${REG_CHECKFAIL} ${MID}
    if [ $? -ne 0 ]; then
      echo ${MID}
      exit 0
    fi
  fi
done

echo 0
exit 1
