X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=bin%2Fsetup.sh;h=b242dc4ae1e4767f5a35750e9e7883718ea72178;hb=c346b0a8bea99a1ec1f12491ce1fceb74d50a426;hp=96049cb97088aa2a3068028b89f879c63ab2336f;hpb=2ea9e524c71b7d83bc9eba7f1d630997f45ebcc0;p=civicrm-core.git diff --git a/bin/setup.sh b/bin/setup.sh index 96049cb970..b242dc4ae1 100755 --- a/bin/setup.sh +++ b/bin/setup.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash set -e -set -x CALLEDPATH=`dirname $0` @@ -21,10 +20,95 @@ source "$CALLEDPATH/setup.conf" source "$CALLEDPATH/setup.lib.sh" if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then - echo; echo Usage: setup.sh [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]; echo + echo + echo "Usage: setup.sh [options] [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]" + echo "[options] is a mix of zero or more of following:" + echo " -a (All) Implies -Dgsef (default)" + echo " -D (Download) Download dependencies" + echo " -g (GenCode) Generate DAO files, SQL files, etc" + echo " -s (Schema) Load new schema in DB" + echo " -d (Data-Plain) Load basic dataset in DB" + echo " -e (Data-Examples) Load example dataset in DB" + echo " -f (Flush) Flush caches and settings" + echo + echo "Example: Perform a full setup" + echo " setup.sh -a" + echo + echo "Example: Setup all the code but leave the DB alone" + echo " setup.sh -Dg" + echo + echo "Example: Keep the existing code but reset the DB" + echo " setup.sh -sef" exit 0 fi +############################################################################### +## Parse command line options + +FOUND_ACTION= +DO_DOWNLOAD= +DO_GENCODE= +DO_SCHEMA= +DO_DATA= +DO_FLUSH= +DEFAULT_DATA= + +while getopts "aDgsdef" opt; do + case $opt in + a) + DO_DOWNLOAD=1 + DO_GENCODE=1 + DO_SCHEMA=1 + DO_DATA=1 + DO_FLUSH=1 + FOUND_ACTION=1 + ;; + D) + DO_DOWNLOAD=1 + FOUND_ACTION=1 + ;; + g) + DO_GENCODE=1 + FOUND_ACTION=1 + ;; + s) + DO_SCHEMA=1 + FOUND_ACTION=1 + ;; + d) + DO_DATA=1 + DEFAULT_DATA=civicrm_data.mysql + FOUND_ACTION=1 + ;; + e) + DO_DATA=1 + DEFAULT_DATA=civicrm_generated.mysql + FOUND_ACTION=1 + ;; + f) + DO_FLUSH=1 + FOUND_ACTION=1 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac +done +if [ -z "$FOUND_ACTION" ]; then + DO_DOWNLOAD=1 + DO_GENCODE=1 + DO_SCHEMA=1 + DO_DATA=1 + DO_FLUSH=1 + DEFAULT_DATA=civicrm_generated.mysql +fi + +shift $((OPTIND-1)) # fetch command line arguments if available if [ ! -z "$1" ] ; then SCHEMA="$1"; fi @@ -49,61 +133,109 @@ if [ -z $DBPASS ] ; then DBPASS=$REPLY fi +MYSQLCMD=$(mysql_cmd) +############################################################################### +## Execute tasks +set -x + +if [ -n "$DO_DOWNLOAD" ]; then + pushd "$CALLEDPATH/.." + COMPOSER=$(pickcmd composer composer.phar) + $COMPOSER install + + if has_commands bower karma ; then + ## dev dependencies have been installed globally; don't force developer to redownload + npm install --production + else + npm install + fi + + BOWER=$(pickcmd node_modules/bower/bin/bower bower) + if [ -f "$BOWER" ]; then + NODE=$(pickcmd node nodejs) + BOWER="$NODE $BOWER" + fi + # Without the force flag, bower may not check for new versions or verify that installed software matches version specified in bower.json + # With the force flag, bower will ignore all caches and download all deps. + if [ -n "$OFFLINE" ]; then + BOWER_OPT= + elif [ ! -f "bower_components/.setupsh.ts" ]; then + ## First run -- or cleanup from failed run + BOWER_OPT=-f + elif [ "bower.json" -nt "bower_components/.setupsh.ts" ]; then + ## Bower.json has changed since last run + BOWER_OPT=-f + fi + [ -f "bower_components/.setupsh.ts" ] && rm -f "bower_components/.setupsh.ts" + $BOWER install $BOWER_OPT + touch bower_components/.setupsh.ts + popd +fi + # run code generator if it's there - which means it's # checkout, not packaged code -if [ -d "$CALLEDPATH/../xml" ]; then - cd "$CALLEDPATH/../xml" - if [ -z "$DBPORT" ]; then - PHP_MYSQL_HOSTPORT="$DBHOST" - else - PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT" - fi - "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' ${GENCODE_CMS} +if [ -n "$DO_GENCODE" -a -d "$CALLEDPATH/../xml" ]; then + pushd "$CALLEDPATH/../xml" + if [ -z "$DBPORT" ]; then + PHP_MYSQL_HOSTPORT="$DBHOST" + else + PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT" + fi + "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' ${GENCODE_CMS} + popd fi -cd "$CALLEDPATH/../sql" -echo; echo "Dropping civicrm_* tables from database $DBNAME" -# mysqladmin -f -u $DBUSER $PASSWDSECTION $DBARGS drop $DBNAME -MYSQLCMD=$(mysql_cmd) -echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \ - | $MYSQLCMD \ - | grep '^\(civicrm_\|log_civicrm_\)' \ - | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \ - | $MYSQLCMD -echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \ - | $MYSQLCMD \ - | grep '^\(civicrm_\|log_civicrm_\)' \ - | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \ - | $MYSQLCMD - - -echo; echo Creating database structure -$MYSQLCMD < civicrm.mysql - -# load civicrm_generated.mysql sample data unless special DBLOAD is passed -if [ -z $DBLOAD ]; then - echo; echo Populating database with example data - civicrm_generated.mysql - $MYSQLCMD < civicrm_generated.mysql -else - echo; echo Populating database with required data - civicrm_data.mysql - $MYSQLCMD < civicrm_data.mysql - echo; echo Populating database with $DBLOAD data - $MYSQLCMD < $DBLOAD +if [ -n "$DO_SCHEMA" ]; then + pushd "$CALLEDPATH/../sql" + echo; echo "Dropping civicrm_* tables from database $DBNAME" + echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \ + | $MYSQLCMD \ + | grep '^\(civicrm_\|log_civicrm_\)' \ + | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \ + | $MYSQLCMD + echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \ + | $MYSQLCMD \ + | grep '^\(civicrm_\|log_civicrm_\)' \ + | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \ + | $MYSQLCMD + + echo; echo Creating database structure + $MYSQLCMD < civicrm.mysql + popd fi -# load additional script if DBADD defined -if [ ! -z $DBADD ]; then - echo; echo Loading $DBADD - $MYSQLCMD < $DBADD +if [ -n "$DO_DATA" ]; then + pushd "$CALLEDPATH/../sql" + # load default data set unless system is configured with override + if [ -z $DBLOAD ]; then + echo; + echo "Populating database with dataset - $DEFAULT_DATA" + $MYSQLCMD < "$DEFAULT_DATA" + else + echo; echo Populating database with required data - civicrm_data.mysql + $MYSQLCMD < civicrm_data.mysql + echo; echo Populating database with $DBLOAD data + $MYSQLCMD < $DBLOAD + fi + + # load additional script if DBADD defined + if [ ! -z $DBADD ]; then + echo; echo Loading $DBADD + $MYSQLCMD < $DBADD + fi + popd fi -# run the cli script to build the menu and the triggers -cd "$CALLEDPATH/.." -"$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1 +if [ -n "$DO_FLUSH" ]; then + pushd "$CALLEDPATH/.." + # run the cli script to build the menu and the triggers + "$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1 -# reset config_backend and userFrameworkResourceURL which gets set -# when config object is initialized -$MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';" + # reset config_backend and userFrameworkResourceURL which gets set + # when config object is initialized + $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';" + popd +fi -echo; echo "Setup Complete. Logout from your CMS to avoid session conflicts." +echo; echo "NOTE: Logout from your CMS to avoid session conflicts."