mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2025-11-29 17:38:24 +08:00
* closes https://github.com/azerothcore/azerothcore-wotlk/issues/4343 This pull request replaces the PowerShell implementation of the AzerothCore database export and squash tools with Bash scripts, streamlining the process and improving compatibility. It also updates the documentation to reflect these changes. The most important changes include the creation of new Bash scripts for exporting databases, squashing databases, and updating versions, as well as the removal of the previous PowerShell script and its associated documentation. ### Script Replacement and Enhancements: * [`apps/DatabaseSquash/DatabaseExporter/DatabaseExporter.sh`](diffhunk://#diff-af0bd252ac095aaad91b842c75b60a689792e6dc9ce88f5e2e4b6f68acf84dcaR1-R69): Introduced a Bash script to replace the PowerShell implementation for exporting database tables, with added features such as formatted SQL output and dynamic directory creation. * [`apps/DatabaseSquash/DatabaseSquash.sh`](diffhunk://#diff-79ff4f749c045a7d91e9b43aefb5d6fbebdc5fdfb430fbcba329e4d96d71a4fbR1-R52): Added a Bash script to automate the database squash process, integrating the version updater and database exporter tools. * [`apps/DatabaseSquash/VersionUpdater/VersionUpdater.sh`](diffhunk://#diff-3abc69c645cb80aff30824739e317c9e847e743eeab15ab4825951d10179b265R1-R84): Created a Bash script for automatically updating the version in `acore.json` and generating SQL update files with proper versioning. ### Documentation Updates: * [`apps/DatabaseSquash/DatabaseExporter/databaseexporter.md`](diffhunk://#diff-b2b291286f2b900a022474f00754ebfe78410780c010d46752335a372d688aefR1-R16): Rewritten documentation to reflect the usage of the new Bash script for database exporting. * [`apps/DatabaseSquash/VersionUpdater/versionupdater.md`](diffhunk://#diff-f12e21f8a404957c90d9120cf9df0724ff27a7efdb5de0798d974079cfe8adadR1-R10): Added documentation for the new version updater tool, explaining its functionality and usage. * [`apps/DatabaseSquash/databasesquash.md`](diffhunk://#diff-4a559f6e7404b529714bac65ad22744feb7b9f88343864a20e0a46974233767eR1-R11): Documented the overall database squash tool, detailing its integration of the version updater and database exporter scripts. ### Removal of Legacy Code: * [`apps/DatabaseExporter/DatabaseExporter.ps1`](diffhunk://#diff-2b4e49f704d88a372b5160c7278839668c81dbecaf52a4edd327873e30b9ae70L1-L234): Removed the PowerShell script for database exporting, along with its associated functionality and settings. * [`apps/DatabaseExporter/databaseexporter.md`](diffhunk://#diff-0618d62def0d611be6e0d4fc524df6f702f493cb87870d9382402aaf52f484e8L1-L85): Deleted outdated documentation for the PowerShell-based database exporter tool.
85 lines
2.3 KiB
Bash
85 lines
2.3 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
|
|
if [[ "$PROJECT_ROOT" =~ ^/([a-zA-Z])/(.*) ]]; then
|
|
DRIVE_LETTER="${BASH_REMATCH[1]}"
|
|
PATH_REMAINDER="${BASH_REMATCH[2]}"
|
|
PROJECT_ROOT="${DRIVE_LETTER^^}:/${PATH_REMAINDER}"
|
|
fi
|
|
|
|
ACORE_JSON_PATH="$PROJECT_ROOT/acore.json"
|
|
DB_WORLD_UPDATE_DIR="$PROJECT_ROOT/data/sql/updates/db_world"
|
|
|
|
VERSION_LINE=$(grep '"version"' "$ACORE_JSON_PATH")
|
|
VERSION=$(echo "$VERSION_LINE" | sed -E 's/.*"version": *"([^"]+)".*/\1/')
|
|
|
|
# Parse version into parts
|
|
if [[ "$VERSION" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(.*)$ ]]; then
|
|
MAJOR="${BASH_REMATCH[1]}"
|
|
SUFFIX="${BASH_REMATCH[4]}"
|
|
NEW_VERSION="$((MAJOR + 1)).0.0$SUFFIX"
|
|
|
|
# Replace version in file
|
|
sed -i.bak -E "s/(\"version\": *\")[^\"]+(\" *)/\1$NEW_VERSION\2/" "$ACORE_JSON_PATH"
|
|
rm -f "$ACORE_JSON_PATH.bak"
|
|
|
|
echo "✅ Version updated to $NEW_VERSION"
|
|
else
|
|
echo "Error: Could not parse version string: $VERSION"
|
|
exit 1
|
|
fi
|
|
|
|
# Extract the new major version from NEW_VERSION
|
|
if [[ "$NEW_VERSION" =~ ^([0-9]+)\. ]]; then
|
|
NEW_MAJOR="${BASH_REMATCH[1]}"
|
|
else
|
|
echo "Error: Unable to extract major version from $NEW_VERSION"
|
|
exit 1
|
|
fi
|
|
|
|
# Prepare SQL content
|
|
DB_VERSION_CONTENT="'ACDB 335.${NEW_MAJOR}-dev'"
|
|
SQL_QUERY="UPDATE \`version\` SET \`db_version\`=${DB_VERSION_CONTENT}, \`cache_id\`=${NEW_MAJOR} LIMIT 1;"
|
|
|
|
# Format date as yyyy_mm_dd
|
|
TODAY=$(date +%Y_%m_%d)
|
|
|
|
# Ensure directory exists
|
|
mkdir -p "$DB_WORLD_UPDATE_DIR"
|
|
|
|
# List existing files for today
|
|
existing_files=($(find "$DB_WORLD_UPDATE_DIR" -maxdepth 1 -type f -name "${TODAY}_*.sql" 2>/dev/null))
|
|
|
|
# Determine next xx counter
|
|
# Determine next xx
|
|
COUNTER="00"
|
|
if [ ${#existing_files[@]} -gt 0 ]; then
|
|
max=0
|
|
for file in "${existing_files[@]}"; do
|
|
basename=$(basename "$file")
|
|
if [[ "$basename" =~ ^${TODAY}_([0-9]{2})\.sql$ ]]; then
|
|
num=${BASH_REMATCH[1]}
|
|
if [[ "$num" =~ ^[0-9]+$ ]] && (( 10#$num > max )); then
|
|
max=$((10#$num))
|
|
fi
|
|
fi
|
|
done
|
|
COUNTER=$(printf "%02d" $((max + 1)))
|
|
fi
|
|
|
|
# Compose final file path
|
|
SQL_FILENAME="${TODAY}_${COUNTER}.sql"
|
|
SQL_FILE_PATH="$DB_WORLD_UPDATE_DIR/$SQL_FILENAME"
|
|
|
|
# Write to file
|
|
{
|
|
echo "-- Auto-generated by VersionUpdater.sh on $(date)"
|
|
echo "$SQL_QUERY"
|
|
} > "$SQL_FILE_PATH"
|
|
|
|
echo "✅ SQL file created at $SQL_FILE_PATH"
|