#!/bin/sh

PERL=/usr/bin/perl
REPOS_PATH="$1"
REV="$2"

if [ -f /opt/backlog/scripts/init-hook ]; then
    . /opt/backlog/scripts/init-hook
fi

domain=${BACKLOG_DOMAIN-"localhost"}
db_dsn=${BACKLOG_DSN-""}
db_type=${BACKLOG_DB_TYPE-"mysql"}
db_name=${BACKLOG_DB_NAME-"backlog"}
db_host=${BACKLOG_DB_HOST-"localhost"}
db_port=${BACKLOG_DB_PORT-"3306"}
db_user=${BACKLOG_DB_USER-"backlog"}
db_pass=${BACKLOG_DB_PASS-"backlog"}
repos_base=${BACKLOG_BASE_REPOSITORY_PATH-"/opt/backlog/data/svn"}
smtp_host=${BACKLOG_SMTP_HOST-"localhost"}
notifications_addr_format=${BACKLOG_MAIL_NOTIFICATIONS_ADDRESS_FORMAT-""}

FS_FORMAT=`head -1 ${REPOS_PATH}/db/format`
if [ $FS_FORMAT -ge 3 ]; then
    if grep "layout sharded" ${REPOS_PATH}/db/format > /dev/null; then
        REVS_PER_DIR=`tail -1 ${REPOS_PATH}/db/format | cut -d' ' -f3`
        REV_DIR=`expr ${REV} / ${REVS_PER_DIR}`
        REV_FILE="${REPOS_PATH}/db/revs/${REV_DIR}/${REV}"
    else
        REV_FILE="${REPOS_PATH}/db/revs/${REV}"
    fi
else
    REV_FILE="${REPOS_PATH}/db/revs/${REV}"
fi

TOTAL_COMMIT_SIZE=`cat "${REV_FILE}" | wc -c`

BACKLOG_REPOS_PATH="$REPOS_PATH" \
REV="$REV" \
COMMIT_SIZE="$TOTAL_COMMIT_SIZE" \
BACKLOG_DOMAIN="$domain" \
BACKLOG_DSN="$db_dsn" \
BACKLOG_DB_TYPE="$db_type" \
BACKLOG_DB_NAME="$db_name" \
BACKLOG_DB_HOST="$db_host" \
BACKLOG_DB_PORT="$db_port" \
BACKLOG_DB_USER="$db_user" \
BACKLOG_DB_PASS="$db_pass" \
BACKLOG_REPOS_BASE="$repos_base" \
BACKLOG_SMTP_HOST="$smtp_host" \
BACKLOG_MAIL_NOTIFICATIONS_ADDRESS_FORMAT="$notifications_addr_format" \
BACKLOG_SVN_HOOK_LOG_DIR="/opt/backlog/httpd/logs" \
$PERL -MBacklog::SVN::Hook -e 'Backlog::SVN::Hook->new->post_commit'
