#!/bin/bash
# Copyright (c) 2012-2014, International Business Machines Corporation and others.  All Rights Reserved.
# for fixing misticketted
# see http://bugs.icu-project.org/trac/wiki/MisTicketted
# TODO:  cleanup ${TMPF}*



rev=
from=
to=

usage()
{
    echo "$0 -r rev -f frombug -t tobug"
}

while getopts "r:f:t:" opt; do
    case $opt in
        r)
            rev=$OPTARG
            ;;
        f)
            from=$OPTARG
            ;;
        t)
            to=$OPTARG
            ;;
        \?)
            echo "Invalid: -$OPTARG" >&2
            usage
            exit 1
            ;;
    esac
done

if [[ ! $rev ]];
then
    echo "need -r rev option" >&2
    usage
    exit 1
fi

if [[ ! $from ]];
then
    echo "need -f oldbug option" >&2
    usage
    exit 1
fi

if [[ ! $to ]];
then
    echo "need -t newbug option" >&2
    usage
    exit 1
fi

if [[ ! -d .svn ]];
then
    echo ".svn is not a directory. Please cd somewhere else." >&2
    exit 1
fi

if [[ ! -d ${TMPDIR} ]];
then
    TMPDIR=/tmp
fi

TMPF=${TMPDIR}/reticket.r${rev}.f${from}.t${to}.txt

echo "Getting log for r${rev}" >&2
( svn pg svn:log --revprop -r ${rev} . | tee  ${TMPF} | sed -e 's%^%< %g' ) || exit 1

head -1 ${TMPF} > ${TMPF}.1

if grep -q "^ticket:${from}[^0-9]" ${TMPF}.1;
then
    echo "-- old/new --"
else
    if grep -q "^ticket:${to}[^0-9]" ${TMPF}.1;
    then
        echo "r${rev} already references ticket:${to} - exitting." >&2
        exit 0
    else
        echo "Error: r${rev} doesn't pertain to ticket:${from} - was this already fixed?" >&2
        exit 1
    fi
fi

( ( sed -e "s%^ticket:${from}%ticket:${to}%" ${TMPF}.1 && tail -n +2 ${TMPF} ) || exit 2 ) | tee ${TMPF}.fix | sed -e 's%^%> %g'

CMD="svn ps svn:log --revprop -r ${rev} -F ${TMPF}.fix"
echo "# ${CMD}"
echo "type YES to do, ^C to kill"
read foo
if [[ $foo = "YES" ]];
then
    echo "## Remember the server still needs to be resynced. See http://bugs.icu-project.org/trac/wiki/FixingMisTicketted"
    exec ${CMD}
else
    exit 0
fi

