#!/bin/sh

# ищет по репозиторию глибов всякие полезные фичи: когда искомый текст появился (таг и коммит)
# подготовка:
# mkdir glib-repo
# cd glib-repo
# git clone git://git.gnome.org/glib
# cp ~/Downloads/glib_search_feature.sh
# ./glib_search_feature.sh g_file_set_contents # поиск начиная с тэга GLIB_2_6_0 или:
# ./glib_search_feature.sh -1 g_file_set_contents # поиск от первого коммита

[ "$1" = "-1" ] && {
    shift
} || {
    START_BISECT_AT=GLIB_2_6_0
}

PRMS=$@
if [ -z "${PRMS}" -a -z "${glib_search_feature_TEXT}" ]; then
    echo "usage: $0 'some_text'"
    exit 1
fi

[ -n "${glib_search_feature_TEXT}" ] && {
    grep -r "${glib_search_feature_TEXT}" glib >/dev/null
    [ $? -ne 0 ] && exit 0
    exit 1
}

export glib_search_feature_TEXT="${PRMS}"
my_PWD=$(pwd)

pushd glib >/dev/null

git reset --hard HEAD >/dev/null
git clean -d -x -f >/dev/null
git checkout master >/dev/null 2>&1
git reset --hard origin/master^ >/dev/null
FAIL_TAG=$(git describe)
git reset --hard origin/master >/dev/null

[ -z "${START_BISECT_AT}" ] && {
    # первый коммит в репе. хрен его знает как узнать.
    # Я не заморачивался: набрал 'git log' и жмакнул клавишу 'End'
    START_BISECT_AT=$(git log --pretty=oneline | tail -n1 | cut -f1 -d ' ')
    FAIL_TAG=""
}

git bisect start origin/master "${START_BISECT_AT}"  -- glib >/dev/null

FOUND_COMMIT=$(git bisect run "${my_PWD}/$0" | grep 'is first bad commit' | cut -d ' ' -f 1)
FOUND_TAG=$(git describe)
[ "${FAIL_TAG}" = "${FOUND_TAG}" ] && {
    echo 'А нету ваапче такой фичи!';
} || {
#    [ -z "${FAIL_TAG}" ] && { echo "Оно изначально было в репе (с первого комита)"; } || {
	echo "Предыдущий тэг, где ещё не было : "${FOUND_TAG}
	echo "Коммит, в котором оно появилось : "${FOUND_COMMIT}
#    }
}

git bisect reset >/dev/null 2>&1

popd >/dev/null
