#!/bin/bash -e

if [ -z "$PYTHON" ]; then
    echo "Error: no PYTHON in env" >&2
    exit 1
fi

rm -rf ./snapshot ./build ./tmp ./dist

$PYTHON setup.py -q bdist_wheel

rm -rf -- *.egg-info

$PYTHON -m virtualenv --system-site-packages ./build/ve

./build/ve/bin/pip install -i 'http://pypi.yandex-team.ru/simple' pip==1.5.6
./build/ve/bin/pip install -i 'http://pypi.yandex-team.ru/simple' --no-index --find-links="$(pwd)"/dist heartbeat

mkdir -p snapshot/lib snapshot/bin snapshot/share

# Copy everything
cp -r build/ve/bin/* snapshot/bin
cp -r build/ve/lib/python2.7/site-packages/* snapshot/lib
cp heartbeat.scsd snapshot/
cp -fr share/* snapshot/share

# Add version
if [ -d .svn ]; then
    svninfo=$(svn info . | grep Revision || true)
elif [ -d .hg ]; then
    svninfo=$(hg svn info | grep Revision || true)
else
    svninfo='Revision: ?'
fi

echo "$svninfo" | awk -F ': ' '{print $2}' > snapshot/.version

# Drop build directory
rm -rf build/

# Recompile pyc files
find snapshot -name '*.py[co]' -delete
$PYTHON -m compileall -d "" -q snapshot/

# Remove not needed stuff
rm -rf snapshot/lib/{pip*,setuptools*}
rm -rf snapshot/lib/{*.py*,*.pth,_*}
rm -rf snapshot/bin/{python*,easy*,pip*,activate*}

# Replace shebangs
for f in snapshot/bin/*; do
    cp "$f" "${f}.tmp"
    echo "#!/bin/sh

script=\"\$0\"
while [ -h \"\$script\" ]; do
    script=\"\$(readlink \"\$script\")\"
done

if [ -z \"\$PYTHON\" ]; then
    fpath=\"\$(cd \$(dirname \"\$script\"); pwd)/\$(basename \"\$script\")\"

    while true; do
        [ \"\$(basename \"\$fpath\")\" = supervisor ] && break
        fpath=\"\$(dirname \"\$fpath\")\"
        [ \"\$fpath\" = \"/\" ] && fpath=\"\" && break
    done

    PYTHON=\"\$fpath/base/active/python/bin/python2.7\"

    if [ ! -x \"\$PYTHON\" ]; then
        PYTHON=\"\$fpath/skynet/python/bin/python2.7\"
    fi

    if [ ! -x \"\$PYTHON\" ]; then
        PYTHON=/skynet/python/bin/python2.7
    fi

    if [ ! -x \"\$PYTHON\" ]; then
        echo \"Error: Unable to find python (point PYTHON env var to any)\" >&2
        exit 1
    fi
elif [ ! -x \"\$PYTHON\" ]; then
    echo \"Error: env PYTHON=\$PYTHON is not executable\"
    exit 1
fi

exec \$PYTHON -s -B -tt \"\${script}.py\" \"\$@\"
" > "${f}.tmp"

cp "${f}" "${f}.py"

echo "#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os
import sys
import re

script = sys.argv[0]
while os.path.islink(script):
    script = os.readlink(script)

sys.path[0] = os.path.abspath(
    os.path.join(
        os.path.dirname(script),
        '../lib'
    )
)
" > "${f}.py"
    tail -n +7 "$f" >> "${f}.py"
    mv "${f}.tmp" "$f"
done
