X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=bin%2Fsetup.sh;h=b242dc4ae1e4767f5a35750e9e7883718ea72178;hb=c346b0a8bea99a1ec1f12491ce1fceb74d50a426;hp=1d5435622e1d29069b3006dc18b7d40d4a3d9476;hpb=639a47e989e0b5b12be546d93f99ec0571f887ee;p=civicrm-core.git diff --git a/bin/setup.sh b/bin/setup.sh index 1d5435622e..b242dc4ae1 100755 --- a/bin/setup.sh +++ b/bin/setup.sh @@ -17,12 +17,98 @@ if [ ! -f "$CALLEDPATH/setup.conf" ]; then fi 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] [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 @@ -30,6 +116,8 @@ if [ ! -z "$2" ] ; then DBLOAD="$2"; fi if [ ! -z "$3" ] ; then DBNAME="$3"; fi if [ ! -z "$4" ] ; then DBUSER="$4"; fi if [ ! -z "$5" ] ; then DBPASS="$5"; fi +if [ ! -z "$6" ] ; then DBHOST="$6"; fi +if [ ! -z "$7" ] ; then DBPORT="$7"; fi # verify if we have at least DBNAME given if [ -z $DBNAME ] ; then @@ -45,64 +133,109 @@ if [ -z $DBPASS ] ; then DBPASS=$REPLY fi -# run code generator if it's there - which means it's -# checkout, not packaged code -if [ -d "$CALLEDPATH/../xml" ]; then - cd "$CALLEDPATH/../xml" - "$PHP5PATH"php GenCode.php $SCHEMA '' $GENCODE_CMS +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 -# someone might want to use empty password for development, -# let's make it possible - we asked before. -if [ -z $DBPASS ]; then # password still empty - PASSWDSECTION="" -else - PASSWDSECTION="-p$DBPASS" +# run code generator if it's there - which means it's +# checkout, not packaged code +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 -u$DBUSER $PASSWDSECTION $DBARGS $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 -mysql -u $DBUSER $PASSWDSECTION $DBARGS $DBNAME < 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 - mysql -u $DBUSER $PASSWDSECTION $DBARGS $DBNAME < civicrm_generated.mysql -else - echo; echo Populating database with required data - civicrm_data.mysql - mysql -u $DBUSER $PASSWDSECTION $DBARGS $DBNAME < civicrm_data.mysql - echo; echo Populating database with $DBLOAD data - mysql -u $DBUSER $PASSWDSECTION $DBARGS $DBNAME < $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 - mysql -u $DBUSER $PASSWDSECTION $DBARGS $DBNAME < $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 -mysql -u$DBUSER $PASSWDSECTION $DBARGS $DBNAME -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."