#!/bin/bash
#
# A test harness for validation of svnmerge-migrate-history.py.

SUBVERSION_PREFIX='/usr/local/subversion'
export PATH="$SUBVERSION_PREFIX/bin:$PATH"
export PYTHONPATH="$SUBVERSION_PREFIX/lib/svn-python"

INITIAL_DIR="`pwd`"
TMP_DIR='/tmp'
REPOS_URL="file://$TMP_DIR/repos"
SCRIPT_DIR=$(python -c "import os; print os.path.abspath(\"`dirname $0`\")")

do_test()
{
    expected_mergeinfo=$1
    flags=$2

    if [ "x${flags}x" = "xx" ]; then
        echo "******* TEST BEGIN (no flags) ********"
    else
        echo "******* TEST BEGIN ${flags} ********"
    fi
    cd $TMP_DIR
    rm -rf repos wc
    echo 'Creating repository, and populating it with baseline data...'
    svnadmin create repos
    svn -q co $REPOS_URL wc

    # r1
    mkdir wc/trunk wc/branches wc/tags
    echo 'hello world' > wc/trunk/hello-world.txt
    svn -q add wc/*
    svn -q ci -m 'Populate repos with skeletal data.' wc

    # r2
    echo 'Creating a branch, and initializing merge tracking data...'
    svn cp -q wc/trunk wc/branches/B
    svn ci -q -m 'Create branch B.' wc

    # r3
    (cd wc/branches/B \
        && $SCRIPT_DIR/svnmerge.py init > /dev/null \
        && svn ci -q -m 'Initialize svnmerge.py merge tracking info on branch B.')

    # r4 - r7
    echo 'Making some trunk commits...'
    echo `date` >> wc/trunk/hello-world.txt \
        && svn -q ci -m 'Tweak hello-world.txt' wc
    echo `date` >> wc/trunk/hello-world.txt \
        && svn -q ci -m 'Tweak hello-world.txt' wc
    echo `date` >> wc/trunk/hello-world.txt \
        && svn -q ci -m 'Tweak hello-world.txt' wc
    echo `date` >> wc/trunk/hello-world.txt \
        && svn -q ci -m 'Tweak hello-world.txt' wc

    # r8
    echo 'Using svnmerge to merge some trunk commits to branch B...'
    svn up -q wc
    (cd wc/branches/B \
        && $SCRIPT_DIR/svnmerge.py merge --revision 4-6 > /dev/null \
        && svn -q ci -m 'svnmerge merge some trunk revisions.')

    # r9
    echo 'Using svn merge --record-only to fake some merges branch B...'
    (cd wc/branches/B \
        && svn merge --record-only -c7 $REPOS_URL/trunk \
        && svn -q ci -m 'svn merge --record-only a trunk revision.')
    svn up -q wc

    # Migrate the mergeinfo!
    cd - > /dev/null
    $SCRIPT_DIR/svnmerge-migrate-history.py $TMP_DIR/repos -v /branches ${flags}
    if [ "$?" != "0" ]; then
        echo '******* TEST FAIL: Mergeinfo migration failed *******' >&2
        return 1
    fi

    # Now see if we got the right results.
    svn pl -vR $REPOS_URL | grep ${expected_mergeinfo} > /dev/null
    if [ "$?" != "0" ]; then
        (echo '******* TEST FAIL: Unexpected mergeinfo:' \
            && svn pget -R svn:mergeinfo $REPOS_URL \
            && echo "Expected (regex): ${expected_mergeinfo} *******") >&2
        return 1
    else
        echo '******* TEST PASS *******'
    fi
}

do_test '/trunk:4-7' ''
do_test '/trunk:1,4-7' '--naive-mode'
