From 598362d103fad3caa38d009a71afd1fbeb0aca1c Mon Sep 17 00:00:00 2001 From: mxmehl Date: Thu, 19 Jan 2017 20:21:31 +0100 Subject: [PATCH] enable normal build of multiple files at once (still not folders); improve and formalise output messages with colours --- fsfe-preview.sh | 184 ++++++++++++++++++++++++++++-------------------- 1 file changed, 108 insertions(+), 76 deletions(-) diff --git a/fsfe-preview.sh b/fsfe-preview.sh index f2e340b..f473213 100755 --- a/fsfe-preview.sh +++ b/fsfe-preview.sh @@ -25,6 +25,20 @@ # ####################################################################### +# Coloured and tagged output +function echo_ERR { + echo -e '\033[0;31m'"[ERROR] $1"'\033[0m' +} +function echo_SUC { + echo -e '\033[0;32m'"[SUCCESS] $1"'\033[0m' +} +function echo_WARN { + echo -e '\033[0;33m'"[WARNING] $1"'\033[0m' +} +function echo_INFO { + echo -e '\033[0;37m'"[INFO] $1"'\033[0m' +} + # Check dependencies (stolen from build_main.sh) deperrors='' for depend in realpath rsync xsltproc xmllint sed find egrep grep wc make tee date iconv; do @@ -50,7 +64,7 @@ source "$ROOT"/config.cfg # Help listing if [ "$1" = "" ]; then self=$(basename $0) - echo "No parameters or variables given!" + echo_WARN "No parameters or variables given!" echo echo "Usage: " echo @@ -75,11 +89,11 @@ LOC_trunk_dev=$(echo $LOC_trunk_dev | sed 's|/$||') # Pure copy if [ "$1" = "--copy" ]; then numargs=$(($# - 1)) - echo "[INFO] Starting a plain mass copy with $numargs files..." + echo_INFO "Starting a plain mass copy with $numargs file(s)..." for ((i=1; i <= $numargs; i++)); do SRC_full=$(realpath $2) DST_full=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_out|") - echo "[INFO] Copying $SRC_full to $DST_full..." + echo_INFO "Copying $SRC_full to $DST_full..." if [ -d "$SRC_full" ] && [ -e "$DST_full" ]; then rm -rf "$DST_full" cp -R $SRC_full $DST_full @@ -89,83 +103,101 @@ if [ "$1" = "--copy" ]; then shift done - echo "[SUCCESS] Copying finished. Files should be visible via the local webserver now." + echo_SUC "Copying finished. Files should be visible via the local webserver now." exit 0 fi -SRC_rel=$1 # e.g. index.en.xhtml -SRC_full=$(realpath $SRC_rel) # Full path to source file - -# CHECK whether the source file is located in LOC_trunk -if [ ! $(echo $SRC_full | grep "$LOC_trunk") ]; then - echo "[ERROR] Given source file is not part of \$LOC_trunk (currently set to \"$LOC_trunk\"). Please only build files which reside in or below this directory. Aborting now." - exit 1 +# Run through number of files given as arguments +numargs=$# +echo_INFO "Building $numargs file(s)" +if [ $numargs -gt 1 ]; then + echo fi +for ((i=1; i <= $numargs; i++)); do + SRC_rel=$1 # e.g. index.en.xhtml + SRC_full=$(realpath $SRC_rel) # Full path to source file -# CHECK whether the source file is a directory (only --copy allowed) -if [ -d "$SRC_full" ]; then - echo "[ERROR] The given file \"$SRC_full\" is a directory. Those can only be copied by using --copy as a parameter." - echo "NOTE: Using --copy won't build potential .xhtml files inside a directory. If you have this case, please first copy an empty directory and then build the .xhtml files inside them." - exit 1 -fi - -# TEST if a DEV SVN directory is used. If yes, copy clean file to this Dir -if [ "$LOC_trunk_dev" != "" ]; then - SRC_full_dev=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_trunk_dev|") - echo "[INFO] A \"dirty\" Development SVN directory ($LOC_trunk_dev) is being used. Copy file from clean SVN directory ($LOC_trunk) to Development directory..." - cp $SRC_full $SRC_full_dev # copy file from clean SVN to dev/dirty SVN - SRC_full=$SRC_full_dev - LOC_trunk=$LOC_trunk_dev -fi - -echo "[INFO] Using file $SRC_full as source..." - -### TRANSFORM XHTML file path -DST_full=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_out|") # replace SVN directory by build/HTTP destination - -### BUILD/COPY FILE depending on file extension -ftype=${SRC_full##*.} # get extension of file -ftype=$(echo "$ftype" | tr '[:upper:]' '[:lower:]') -ftype_build="xhtml" # file types which have to be built - -if [[ "$ftype" == @($ftype_build) ]]; then # XHTML file - DST_full=$(echo $DST_full | sed -E "s/$ftype_build/html/") # Replace xhtml by html - echo "[INFO] XHTML file detected. Going to build into $DST_full ..." - - xmllint --noout "$SRC_full" || (echo; echo "[ERROR] Syntax error in $SRC_full. Error message above. Please fix!"; exit 1) - if [[ "$?" != "0" ]]; then exit 1; fi - - $LOC_trunk/build/build_main.sh process_file $SRC_full > $DST_full - -else # just copy file - echo "[INFO] File type ($ftype) is detected as not to be built. Just copying it to $DST_full ..." - cp $SRC_full $DST_full -fi - - -### START WEBSERVER if necessary -if [ "$HTTPD" == "python" ]; then # python - if [ ! $(pgrep -f "pywebserver-fsfe.py $LOC_out") ]; then - echo "[INFO] Starting $HTTPD webserver" - nohup "$ROOT/pywebserver-fsfe.py" "$LOC_out" "$HTTPD_port" > "$ROOT"/pywebserver-fsfe.log 2>&1 & - else - echo "[INFO] $HTTPD webserver already seems to be running." + # CHECK whether the source file is located in LOC_trunk + if [ ! $(echo $SRC_full | grep "$LOC_trunk") ]; then + echo_ERR "Given source file is not part of \$LOC_trunk (currently set to \"$LOC_trunk\"). Please only build files which reside in or below this directory. Aborting now." + exit 1 fi -elif [ "$HTTPD" == "lighttpd" ]; then - if [ ! $(pgrep lighttpd) ]; then # lighttpd - echo "[INFO] Starting $HTTPD webserver" - /usr/sbin/lighttpd -f "$HTTPD_conf" - else - echo "[INFO] $HTTPD webserver already seems to be running." - fi -elif [ "$HTTPD" == "" ]; then # empty variable - echo "[ERROR] No webserver specified. Please define variable HTTPD in config.cfg. Aborting now." - exit 1 -else # something custom - echo "[WARNING] Unknown webserver defined. Please check variable HTTPD in config.cfg." -fi -### SHOW RESULTS -echo -DST_rel=$(echo $DST_full | sed "s|$LOC_out||") # relative path -echo "[SUCCESS] Finished. File can be viewed at http://localhost:5080$DST_rel" + # CHECK whether the source file is a directory (only --copy allowed) + if [ -d "$SRC_full" ]; then + echo_ERR "The given file \"$SRC_full\" is a directory. Those can only be copied by using --copy as a parameter." + echo_ERR "NOTE: Using --copy won't build potential .xhtml files inside a directory. If you have this case, please first copy an empty directory and then build the .xhtml files inside them." + exit 1 + fi + + # TEST if a DEV SVN directory is used. If yes, copy clean file to this Dir + if [ "$LOC_trunk_dev" != "" ]; then + SRC_full_dev=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_trunk_dev|") + echo_INFO "A \"dirty\" Development SVN directory ($LOC_trunk_dev) is being used. Copy file from clean SVN directory ($LOC_trunk) to Development directory..." + cp $SRC_full $SRC_full_dev # copy file from clean SVN to dev/dirty SVN + SRC_full=$SRC_full_dev + LOC_trunk=$LOC_trunk_dev + fi + + echo_INFO "Using file $SRC_full as source..." + + ### TRANSFORM XHTML file path + DST_full=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_out|") # replace SVN directory by build/HTTP destination + + ### BUILD/COPY FILE depending on file extension + ftype=${SRC_full##*.} # get extension of file + ftype=$(echo "$ftype" | tr '[:upper:]' '[:lower:]') + ftype_build="xhtml" # file types which have to be built + + if [[ "$ftype" == @($ftype_build) ]]; then # XHTML file + DST_full=$(echo $DST_full | sed -E "s/$ftype_build/html/") # Replace xhtml by html + echo_INFO "XHTML file detected. Going to build into $DST_full ..." + + xmllint --noout "$SRC_full" || (echo; echo "Syntax error in $SRC_full. Error message above. Please fix!"; exit 1) + if [[ "$?" != "0" ]]; then exit 1; fi + + $LOC_trunk/build/build_main.sh process_file $SRC_full > $DST_full + + else # just copy file + echo_INFO "File type ($ftype) is detected as not to be built. Just copying it to $DST_full ..." + cp $SRC_full $DST_full + fi + + + ### START WEBSERVER if necessary + if [ "$HTTPD" == "python" ]; then # python + if [ ! $(pgrep -f "pywebserver-fsfe.py $LOC_out") ]; then + echo_INFO "Starting $HTTPD webserver" + nohup "$ROOT/pywebserver-fsfe.py" "$LOC_out" "$HTTPD_port" > "$ROOT"/pywebserver-fsfe.log 2>&1 & + else + echo_INFO "$HTTPD webserver already seems to be running." + fi + elif [ "$HTTPD" == "lighttpd" ]; then + if [ ! $(pgrep lighttpd) ]; then # lighttpd + echo_INFO "Starting $HTTPD webserver" + /usr/sbin/lighttpd -f "$HTTPD_conf" + else + echo_INFO "$HTTPD webserver already seems to be running." + fi + elif [ "$HTTPD" == "" ]; then # empty variable + echo_ERR "No webserver specified. Please define variable HTTPD in config.cfg. Aborting now." + exit 1 + else # something custom + echo_WARN "Unknown webserver defined. Probably you won't be able to see the file in your browser. Building it anyway. Please check variable \"HTTPD\" in config.cfg." + fi + + ### SHOW RESULTS + DST_rel=$(echo $DST_full | sed "s|$LOC_out||") # relative path + echo_SUC "Finished. File can be viewed at http://localhost:5080$DST_rel" + + if [ $numargs -gt 1 ]; then + echo "++++++++++++++++++++++++++++++++++" + fi + + shift +done + +if [ $numargs -gt 1 ]; then + echo + echo_SUC "$numargs files have been processed. Preview links to each file can be found individually above." +fi