mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
This fixes an annoying issue where one tries to rebuild the database, and it fails due to there being existing connections. The one thing that is potentially scary about this implementation is that it means it's now a lot easier to accidentally drop your production database by running the wrong script; might be worth adding a "--force" flag controlling this behavior or something. Thanks to Nemanja Stanarevic and Neeraj Wahi for prototypes of this implementation! They did most of the work and testing for this.
51 lines
2.1 KiB
Bash
Executable File
51 lines
2.1 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
function migration_status {
|
|
./manage.py migrate --list --settings=zproject.test_settings | sed 's/*/ /' > "$1"
|
|
}
|
|
|
|
template_grep_error_code=$(echo "SELECT 1 from pg_database WHERE datname='zulip_test_template';" | python manage.py dbshell --settings=zproject.test_settings | grep -q "1 row"; echo $?)
|
|
|
|
if [ "$template_grep_error_code" == "0" ]; then
|
|
migration_status zerver/fixtures/available-migrations
|
|
if [ -e zerver/fixtures/migration-status ] &&
|
|
cmp -s zerver/fixtures/available-migrations zerver/fixtures/migration-status &&
|
|
[ "$1" != "--force" ]; then
|
|
"$(dirname "$0")/../scripts/setup/terminate-psql-sessions" zulip zulip_test zulip_test_base zulip_test_template
|
|
psql -h localhost postgres zulip_test << EOF
|
|
DROP DATABASE IF EXISTS zulip_test;
|
|
CREATE DATABASE zulip_test TEMPLATE zulip_test_template;
|
|
EOF
|
|
sh "$(dirname "$0")/../scripts/setup/flush-memcached"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
mkdir -p zerver/fixtures
|
|
|
|
"$(dirname "$0")/../scripts/setup/terminate-psql-sessions" zulip zulip_test zulip_test_base zulip_test_template
|
|
|
|
psql -h localhost postgres zulip_test <<EOF
|
|
DROP DATABASE IF EXISTS zulip_test;
|
|
CREATE DATABASE zulip_test TEMPLATE zulip_test_base;
|
|
EOF
|
|
sh "$(dirname "$0")/../scripts/setup/flush-memcached"
|
|
|
|
python manage.py migrate --noinput --settings=zproject.test_settings
|
|
migration_status "zerver/fixtures/migration-status"
|
|
|
|
# This next line can be simplified to "-n0" once we fix our app (and tests) with 0 messages.
|
|
python manage.py populate_db --settings=zproject.test_settings --test-suite -n30 \
|
|
--threads=1 --huddles=0 --personals=0 --percent-huddles=0 --percent-personals=0
|
|
python manage.py dumpdata --settings=zproject.test_settings \
|
|
zerver.UserProfile zerver.Stream zerver.Recipient \
|
|
zerver.Subscription zerver.Message zerver.Huddle zerver.Realm \
|
|
zerver.UserMessage zerver.Client \
|
|
zerver.DefaultStream > zerver/fixtures/messages.json
|
|
|
|
# create pristine template database, for fast fixture restoration after tests are run.
|
|
psql -h localhost postgres zulip_test << EOF
|
|
DROP DATABASE IF EXISTS zulip_test_template;
|
|
CREATE DATABASE zulip_test_template TEMPLATE zulip_test;
|
|
EOF
|