One of the biggest problems I’ve had in CS Cart development was remembering to disable and then re-enable any addons that had changes. I’ve created some scripts to help the devops development flow in CS Cart:
https://github.com/heybige/cscart_cli_scripts
‘cli_lib.php’ is a stripped down version of ‘admin.php’ that I use to bootstrap into CSC from the command line. ‘clear_cache.php’ should be self-explanatory – it just clears the cache from the command line.
HINT: if you’re having any kind of problem with CS Cart, always try clearing the cache. And you may consider doing a “hard reset” (rm -rf var/cache/* in your root CSC directory) because there are files that don’t get cleared out with a standard “clear cache” command.
So the magic starts with a git hook script ‘post-merge’ (.git/hooks/post-merge):
#!/bin/bash export ROOT=/path/to/cscart/base ## HARD RESET rm -rf $ROOT/var/cache/* ## RUN COMPOSER cd $ROOT/app/lib composer install $ROOT/bin/flip_addon.sh
Pretty standard. It’s worth noting that you can add your own Composer packages in the existing composer.json file and use them throughout CSC. I’ll do a future post about how I added some custom logging to CS Cart (lack of file-based logging is another of my huge CSC pet peeves).
#!/bin/bash export ROOT=/path/to/cscart ADDONS=() ADDON_LIST=`cd $ROOT; git diff "HEAD@{1}" --name-only | egrep 'app/addons/.+?/addon.xml'` if [ ! -z "$ADDON_LIST" ]; then for file in $ADDON_LIST; do OIFS=$IFS IFS='/' arrItems=($file) ADDONS=("${ADDONS[@]}" ${arrItems[2]}) IFS=$OIFS done fi ADDON_LIST=`cd $ROOT; git diff "HEAD@{1}" --name-only | grep 'var/themes_repository/basic/templates/addons/'` if [ ! -z "$ADDON_LIST" ]; then for file in $ADDON_LIST; do OIFS=$IFS IFS='/' arrItems=($file) ADDONS=("${ADDONS[@]}" ${arrItems[5]}) IFS=$OIFS done fi function join { local IFS="$1"; shift; echo "$*"; } if [ ! -z "$ADDONS" ]; then if [ ${#ADDONS[@]} -gt 1 ]; then CHANGED=($(printf "%s\n" "${ADDONS[@]}" | sort -u)) LIST=`join : "${CHANGED[@]}"` else LIST=${ADDONS[0]} fi echo "php $ROOT/bin/php_flip_addon.php $LIST" php $ROOT/bin/php_flip_addon.php $LIST fi
Basically, this script just determines which addon files have changed, and builds a (unique) colon-separated list to pass to ‘php_flip_addon.php’
I won’t post ‘php_flip_addon.php’ but it takes the colon-separated addon list, starts building a stack of the addons that need to be “flipped”, taking into account any dependencies. It uninstalls all those addons in the proper order, then re-installs them in the reverse order. If there’s a problem uninstalling, it will immediately reverse the order to try and get back to the “known good” state.