[BASH] improved db assembler with more effective md5 check

This commit is contained in:
Yehonal
2016-08-07 11:36:00 +02:00
parent 2b5605da5c
commit 16083b7115

View File

@@ -8,142 +8,142 @@ if [ -f "./config.sh" ]; then
source "./config.sh" # should overwrite previous source "./config.sh" # should overwrite previous
fi fi
version_marker="$OUTPUT_FOLDER/ZZZ_latest_version_" unamestr=`uname`
if [[ "$unamestr" == 'Darwin' ]]; then
version="0000_00_00_00" MD5_CMD="md5"
for entry in "$version_marker"*
do
if [ -f "$entry" ]; then
version=${entry#$version_marker}
fi
break
done
#
# You can pass latest version as first argument of this script
#
if [ -z "$1" ]; then
read -p "Enter latest sql version ( leave blank to use : $version )" $rev
version=${rev:-$version}
else else
version=$1 MD5_CMD="md5sum"
fi fi
reg_file="$OUTPUT_FOLDER/.zzz_db_assembler_registry.sh"
declare -A registry
if [ -f "$reg_file" ]; then
source "$reg_file"
fi
echo "===== STARTING PROCESS =====" echo "===== STARTING PROCESS ====="
gtversion=""
function assemble() { function assemble() {
database=$1 database=$1
start_sql=$2 start_sql=$2
var_base="DB_"$database"_PATHS" var_base="DB_"$database"_PATHS"
base=${!var_base} base=${!var_base}
var_updates="DB_"$database"_UPDATE_PATHS" var_updates="DB_"$database"_UPDATE_PATHS"
updates=${!var_updates} updates=${!var_updates}
var_custom="DB_"$database"_CUSTOM_PATHS" var_custom="DB_"$database"_CUSTOM_PATHS"
custom=${!var_custom} custom=${!var_custom}
suffix_base="" suffix_base=""
suffix_upd="" suffix_upd=""
suffix_custom="" suffix_custom=""
if (( $ALL_IN_ONE == 0 )); then if (( $ALL_IN_ONE == 0 )); then
suffix_base="_base" suffix_base="_base"
fi; fi;
echo "" > $OUTPUT_FOLDER$database$suffix_base".sql" echo "" > $OUTPUT_FOLDER$database$suffix_base".sql"
if [ ! ${#base[@]} -eq 0 ]; then if [ ! ${#base[@]} -eq 0 ]; then
echo "Generating $OUTPUT_FOLDER$database$suffix_base ..." echo "Generating $OUTPUT_FOLDER$database$suffix_base ..."
for d in "${base[@]}" for d in "${base[@]}"
do do
if [ ! -z $d ]; then if [ ! -z $d ]; then
for entry in "$d"/*.sql "$d"/**/*.sql for entry in "$d"/*.sql "$d"/**/*.sql
do do
if [ -e $entry ]; then if [[ -e $entry ]]; then
cat "$entry" >> $OUTPUT_FOLDER$database$suffix_base".sql" cat "$entry" >> $OUTPUT_FOLDER$database$suffix_base".sql"
fi fi
done done
fi fi
done done
fi fi
if (( $ALL_IN_ONE == 0 )); then if (( $ALL_IN_ONE == 0 )); then
suffix_upd="_updates" suffix_upd="_updates"
echo "" > $OUTPUT_FOLDER$database$suffix_upd".sql" echo "" > $OUTPUT_FOLDER$database$suffix_upd".sql"
fi; fi;
if [ ! ${#updates[@]} -eq 0 ]; then if [ ! ${#updates[@]} -eq 0 ]; then
echo "Generating $OUTPUT_FOLDER$database$suffix_upd ..." echo "Generating $OUTPUT_FOLDER$database$suffix_upd ..."
for d in "${updates[@]}" for d in "${updates[@]}"
do do
for entry in "$d"/*.sql "$d"/**/*.sql if [ ! -z $d ]; then
do for entry in "$d"/*.sql "$d"/**/*.sql
if [ ! -z $d ]; then do
file=$(basename $entry) if [[ ! -e $entry ]]; then
if [[ "$file" > "$start_sql" ]] continue
then fi
if [ -e $entry ]; then
if [[ "$gtversion" < "$file" ]]; then
gtversion=$file
fi
cat "$entry" >> $OUTPUT_FOLDER$database$suffix_upd".sql" file=$(basename "$entry")
fi hash=$($MD5_CMD "$entry")
fi hash="${hash%% *}" #remove file path
fi if [[ -z ${registry[$hash]} ]]; then
done registry["$hash"]="$file"
done echo "-- New update sql: "$file
fi cat "$entry" >> $OUTPUT_FOLDER$database$suffix_upd".sql"
fi
done
fi
done
fi
if (( $ALL_IN_ONE == 0 )); then if (( $ALL_IN_ONE == 0 )); then
suffix_custom="_custom" suffix_custom="_custom"
echo "" > $OUTPUT_FOLDER$database$suffix_custom".sql" echo "" > $OUTPUT_FOLDER$database$suffix_custom".sql"
fi; fi;
if [ ! ${#custom[@]} -eq 0 ]; then
echo "Generating $OUTPUT_FOLDER$database$suffix_custom ..."
for d in "${custom[@]}" if [ ! ${#custom[@]} -eq 0 ]; then
do echo "Generating $OUTPUT_FOLDER$database$suffix_custom ..."
if [ ! -z $d ]; then
for entry in "$d"/*.sql "$d"/**/*.sql for d in "${custom[@]}"
do do
if [ -e $entry ]; then if [ ! -z $d ]; then
cat "$entry" >> $OUTPUT_FOLDER$database$suffix_custom".sql" for entry in "$d"/*.sql "$d"/**/*.sql
fi do
done if [[ ! -e $entry ]]; then
fi continue
done fi
fi
file=$(basename "$entry")
hash=$($MD5_CMD "$entry")
hash="${hash%% *}" #remove file path
if [[ -z ${registry[$hash]} ]]; then
registry["$hash"]="$file"
echo "-- New custom sql: "$file
cat "$entry" >> $OUTPUT_FOLDER$database$suffix_custom".sql"
fi
done
fi
done
fi
} }
mkdir -p $OUTPUT_FOLDER mkdir -p $OUTPUT_FOLDER
for db in ${DATABASES[@]} for db in ${DATABASES[@]}
do do
assemble "$db" $version".sql" assemble "$db" $version".sql"
done done
if [ ! -z $gtversion ]; then echo "" > $reg_file
if [ -f $version_marker* ]; then
rm $version_marker* for i in "${!registry[@]}"
fi do
echo $gtversion > $OUTPUT_FOLDER"ZZZ_latest_version_"${gtversion%.*} echo "registry['"$i"']='"${registry[$i]}"'" >> "$reg_file"
fi done
echo "===== DONE =====" echo "===== DONE ====="