Newer
Older
#!/bin/sh
# vim: set shiftwidth=4 softtabstop=4:
#
# This script start odoo for development
#
# You can set ODOO_DATA_DIR and ODOO_DB_HOST if you want to avoid using the default value ($HOME/var/tmp and localhost)
#

Vincent Hatakeyama
committed
here=$(dirname $0)
project_home=$(cd $here && cd .. && echo $PWD)
if [ -x "$(command -v python3)" ];
then
python="python3"
else
python="python2"
fi

Vincent Hatakeyama
committed
# odoo7, odoo8, odoo10, odoo11 or bzr
ODOO_TYPE=$($python -B -c "from six.moves import configparser ; c = configparser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print(c.get('odoo_scripts', 'odoo_type') if c.has_option('odoo_scripts', 'odoo_type') else 'odoo8')")

Vincent Hatakeyama
committed
load_language=$($python -B -c "from six.moves import configparser ; c = configparser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print(c.get('odoo_scripts', 'load-language') if c.has_option('odoo_scripts', 'load-language') else '')")

Vincent Hatakeyama
committed
echo "INFO - Starting odoo for development"
#
# Do some magic to find the odoo command to run
#
# First test if odoo command exists
case $ODOO_TYPE in
odoo7 | odoo8)
odoo_command=openerp-server
odoo_addons_path=${ODOO_ADDONS_PATH:-/opt/odoo/sources/odoo}
;;
odoo_command=odoo
;;
esac
echo "DEBUG - Trying odoo command $odoo_command"
if [ -x "$(command -v $odoo_command)" ];
odoo_bin=$odoo_command
echo "DEBUG - Command found"

Vincent Hatakeyama
committed
else
echo "DEBUG - No odoo command found"
echo "DEBUG - Trying import in python"
if [ "$ODOO_TYPE" = "odoo11" ] || [ "$ODOO_TYPE" = "odoo10" ];
print_statement="import os;import odoo;print os.path.abspath(odoo.__file__)"

Vincent Hatakeyama
committed
else
print_statement="import os;import openerp;print os.path.abspath(openerp.__file__)"

Vincent Hatakeyama
committed
fi
# module_path will be .../<directory>/openerp/__init__.pyc
module_path=$(python -B -c "$print_statement" 2> /dev/null)
echo "DEBUG - No odoo found by using module path"
virtualenv_name=$(basename $(readlink -f $(dirname start)))
echo "DEBUG - Trying $virtualenv_name virtualenvwrapper"
# assume you use virtualenvwrapper, and try the same env name as the project
venv_python=$WORKON_HOME/$virtualenv_name/bin/python
if [ -e "$venv_python" ];
module_path=$($venv_python -B -c "$print_statement" 2> /dev/null)
fi
if test -z "$module_path";
then
echo "DEBUG - No odoo found by using virtuenvwrapper"
echo "DEBUG - Trying in /opt/odoo/sources/odoo"
if test -e "/opt/odoo/sources/odoo/$odoo_bin";
then
echo "DEBUG - Found in /opt/odoo/sources/odoo"
odoo_bin=/opt/odoo/sources/odoo/$odoo_bin
module_path="/opt/odoo/sources/odoo/odoo/__init__.py"
else
echo "FATAL - No odoo found"
echo "INFO - Maybe you forgot to activate your environment?"
exit 1
fi
else
echo "DEBUG - Odoo found by using virtuenvwrapper"
fi

Vincent Hatakeyama
committed
else
echo "DEBUG - Odoo found by using module path ($module_path)"

Vincent Hatakeyama
committed
odoo=$(dirname $(dirname $module_path))
if expr match $odoo ^.*\.egg$ || [ "$ODOO_TYPE" = "odoo10" ] ;
then
odoo_addons_path=${ODOO_ADDONS_PATH:-/opt/odoo/sources/odoo}
else
odoo_addons_path=${ODOO_ADDONS_PATH:-$odoo}
fi

Vincent Hatakeyama
committed
#
# Try to handle argument to this program to give them back to odoo without duplicating them
#
args=$*
if echo $args | grep -q -e "\( \|^\)--db_host";
then
db_host=""
else
db_host="--db_host=localhost"
fi
if echo $args | grep -q -e "\( \|^\)-c" -e "\( \|^\)--config";
then
config=""
addons_path=""
else
if [ -e "${project_home}/conf/drone/odoo.conf" ];
then
config="-c ${project_home}/conf/drone/odoo.conf"
elif [ -e "${project_home}/conf/dev/odoo.conf" ];
then
config="-c ${project_home}/conf/dev/odoo.conf"
fi
if echo $args | grep -q -e "\( \|^\)--addons-path";
then
addons_path="--addons-path=$($python -B -c "from six.moves import configparser ; import os ; c = configparser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print(','.join(['$HOME/src/openobject-server/openerp/addons','$HOME/src/openobject-addons','$HOME/src/openerp-web/addons']+['${project_home}/'+line for line in set(os.path.dirname(path) for path in c.get('odoo_scripts', 'modules').split())]))")"
if [ "$ODOO_TYPE" = "odoo7" ] || [ "$ODOO_TYPE" = "odoo8" ];
then
pathes=$($python -B -c "from six.moves import configparser ; import os ; c = configparser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print(','.join(['$odoo_addons_path/addons']+['${project_home}/'+line for line in set(os.path.dirname(path) for path in c.get('odoo_scripts', 'modules').split())]))")
else
pathes=$($python -B -c "from six.moves import configparser ; import os ; c = configparser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print(','.join(['${project_home}/'+line for line in set(os.path.dirname(path) for path in c.get('odoo_scripts', 'modules').split())]))")
fi
if [ -n "$pathes" ];
then
addons_path="--addons-path=$pathes"
fi
fi
# use load-language from setup.cfg
if echo $args | grep -q -e "\( \|^\)-c" -e "\( \|^\)--load-language";
then
if [ -n "$load_language" ];
then
# TODO handle that correctly
echo "FATAL - load-language flag on top of configuration load-language from setup"
exit 1
fi
else
if [ -n "$load_language" ];
then
load_language="--load-language $load_language"
fi
fi

Vincent Hatakeyama
committed
#
# Start odoo
#
echo "INFO - Version: $($odoo_bin --version)"
echo "DEBUG - command line is: $odoo_bin $config $db_host $addons_path $args $load_language"
$odoo_bin $config $db_host $addons_path $args $load_language