8283f85926f62192df95f95c17fe96e53dfe415f
chmalee
  Tue Dec 5 08:33:20 2017 -0800
Fixing file globbing bug in updateTimesDb.sh

diff --git src/utils/qa/updateTimesDb.sh src/utils/qa/updateTimesDb.sh
index a8bcaf5..202a972 100755
--- src/utils/qa/updateTimesDb.sh
+++ src/utils/qa/updateTimesDb.sh
@@ -1,168 +1,171 @@
 #!/bin/bash
 
 # quit if something within the script fails
 set -beEu -o pipefail
 
 umask 002
 
 ############################
 # 
 #  02-17-16 -- Matt Speir
 #
 #  This script will output a the update
 #  times for all of the tables in a single
 #  database on dev and beta. One can also
 #  specify a different database on beta
 #  so that table update times can be
 #  compared between different databases on
 #  different machines.
 #
 #  This script is intended to replace
 #  updateTimesDb.csh
 #
 ############################
 
 ##### Variables #####
 # Set by command-line options
 dbDev=""
 dbBeta=""
 outputFiles=false
 
 ##### Functions #####
 
 showHelp() {
 cat << EOF
 
 Usage: `basename $0` [-hf] [-d DATABASE DEV] [-b DATABASE BETA]
 
 	-h                  Display this help and exit
 	-d DATABASE DEV     Database to check on Dev, e.g. hg19 or hg38.
 	-b DATABASE BETA    Database to check on Beta.
 	-f 		    Output lists of tables on Dev and Beta into 
 			    files.
 
 Shows table update times for an entire database on Dev and Beta. If you wish to
 compare databases between the machines, use the -b option to specify the
 database on Beta.
 
 For example, to compare the same assembly on Dev and Beta
 
 	updateTimesDb.sh -d ce10
 
 Or, for example to compare two different databases on Dev and Beta
 
 	updateTimesDb.sh -d ce6 -b ce10
  
 Output is formatted as a table:
 
              dev db	beta db
 tableName    <time>	<time>
 
 If -f is used, the list of tables on Dev is output to <db>.tables and the list
 of tables on Beta is output to <db>.beta.tables.
 
 Notes: 
 - If a table isn't present on a machine, then you will see a "." in place
   of a time
 - trackDb and hgFindSpec tables are excluded from the output
 
 EOF
 }
 
 ##### Parse command-line input #####
 
 OPTIND=1 # Reset is necessary if getopts was used previously in the script.
 	 # It is a good idea to make this local in a function.
 while getopts "hd:b:f" opt
 do                     
         case $opt in   
                 h)     
                         showHelp
                         exit 0
                         ;;
                 d)     
                         dbDev=$OPTARG
 			# Check if dbBeta is empty before trying to set it
 			if [[ $dbBeta == "" ]]
 			then
 				dbBeta=$dbDev
 			fi
 			;;
                 b)     
                         dbBeta=$OPTARG
                         ;;
                 f)     
                         outputFiles=true
                         ;;
                 '?')   
                         showHelp >&2
                         exit 1
                         ;;
         esac
 done
 # Check if no command line options were supplied
 if [ $OPTIND -eq 1 ]
 then
 	showHelp >&2
 	exit 1
 fi
 
 shift "$((OPTIND-1))" # Shift off the options and optional --.
 
 ##### Main Program #####
 
 # Take tables for each DB from dev and beta and store as seperate arrays
 if [[ $outputFiles == true ]]
 then
 	# If "-f" is used output list of tables on Dev and Beta to a file.
 	# These files of table names are used by other programs, 
 	# including proteins.csh.
 	tablesDev=($(hgsql -Ne "SHOW TABLES" $dbDev | sort | \
 		tee $dbDev.tables ))
 	tablesBeta=($(hgsql -h mysqlbeta -Ne "SHOW TABLES" $dbBeta | sort | \
 		tee $dbBeta.beta.tables ))
 else 
 	tablesDev=($(hgsql -Ne "SHOW TABLES" $dbDev | sort))
 	tablesBeta=($(hgsql -h mysqlbeta -Ne "SHOW TABLES" $dbBeta | sort))
 fi
 
 # Combine tables from Dev and Beta, then sort and make list unique
 tablesSortedUnique=$(echo "$(echo ${tablesDev[@]} ${tablesBeta[@]})" | \
 	tr ' ' '\n' | sort -u | grep -v 'hgFindSpec\|trackDb' | tr '\n' ' ')
 
 output=". DEV BETA\ntableName $dbDev $dbBeta\n"
 
+# if there's errors, the *** is causing wildcard expansion, so disable globbing
+set -f
+
 for tbl in $(echo ${tablesSortedUnique[@]})
 do
 	# Underscores added between date and time to that way "column" command later on works correctly
         devUpdate=$(hgsql -Ne "SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA='$dbDev' AND TABLE_NAME='$tbl'" \
 		| sed 's/ /_/g')
         betaUpdate=$(hgsql -h mysqlbeta -Ne "SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA='$dbBeta' AND TABLE_NAME='$tbl'" \
 		| sed 's/ /_/g')
 
 	# Can't have have completely empty entries or "column" won't work
         if [[ $devUpdate == "" ]]
         then   
                 devUpdate="."
         elif [[ $betaUpdate == "" ]]
         then   
                 betaUpdate="."
         fi
 
 	# Variable to hold error/diff marking
 	error=""
 
 	# Check to see if table times match on Dev and Beta
 	if [[ $devUpdate != $betaUpdate ]] && [[ $devUpdate != "." ]] && [[ $betaUpdate != "." ]]
 	then
 		# If they don't match, mark diff lines with ***
 		error="***"
 	fi
 
 	# Update our output string with new info
         output+="$tbl $devUpdate $betaUpdate $error\n"
 done
 
 # Output results to command line 
 # Final sed is to remove underscores inserted as part of last step
 echo -e $output | column -t -s' ' | sed 's:\([0-9]\)\(_\)\([0-9]\):\1 \3:g'