Mercurial > kallithea
view scripts/dbmigrate-test @ 7543:c9159e6fda04
cleanup: remove unnecessary (and potentially problematic) use of 'literal'
webhelpers.html.literal (kallithea.lib.helpers.literal) is only needed when
the passed string may contain HTML that needs to be interpreted literally.
It is unnecessary for plain strings.
Incorrect usage of literal can lead to XSS issues, via a malicious user
controlling data which will be rendered in other users' browsers. The data
could either be stored previously in the system or be part of a forged URL
the victim clicks on.
For example, when a user browses to a forged URL where a repository
changeset or branch name contains a javascript snippet, the snippet
was executed when printed on the page using 'literal'.
Remaining uses of 'literal' have been reviewed with no apparent problems
found.
Reported by Bob Hogg <wombat@rwhogg.site> (thanks!).
author | Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> |
---|---|
date | Sat, 26 Jan 2019 20:00:14 +0100 |
parents | 3158cf0dafb7 |
children | 0a9ddb8cd8c1 |
line wrap: on
line source
#!/bin/sh -e if [ $# -lt 2 ] || [ $# -gt 3 ]; then cat >&2 <<EOD usage: $0 CONFIG_FILE FROM_REV [TO_REV] Runs a database migration from FROM_REV to TO_REV (default: current working directory parent), using the specified CONFIG_FILE (.ini file). Test is run using a clean Kallithea install, in a temporary virtual environment. FROM_REV and (optional) TO_REV should be Mercurial revision identifiers (e.g. changeset hash or a version number tag). The working directory is not touched, but the database referenced in the config file will be (re)created. Only SQLite is available out of the box; for MySQL or PostgreSQL, set the EXTRA environment variable to the required package(s), and it'll be installed in the virtual environment. (E.g. EXTRA=MySQL-python or EXTRA=psycopg2.) The temporary directory is not removed, allowing follow-up examination of the upgrade results. It is, however, created in /tmp by default, which many Linux distributions automatically clean at regular intervals. EOD exit 1 fi config_file=$(readlink -f "$1") from_rev=$2 to_rev=$3 source_repo=$(dirname "$(dirname "$(readlink -f "$0")")") announce() { echo echo "$1" echo } quiet_if_ok() ( local output local st set +e output=$("$@" < /dev/null 2>&1) st=$? if [ $st -ne 0 ]; then echo "$output" >&2 echo "Command $@ returned exit status $st." >&2 exit 1 fi ) HG() { "${HG:-hg}" --repository "$source_repo" "$@" } # If upgrading to "current revision", warn if working directory is dirty. if [ ! "$to_rev" ] && [ "$(HG status -mard)" ]; then announce "Warning: Uncommitted changes in working directory will be ignored!" fi from_rev_hash=$(HG id --id --rev "${from_rev:-.}") to_rev_hash=$(HG id --id --rev "${to_rev:-.}") temp=$(readlink -f "$(mktemp --tmpdir -d 'dbmigrate-test.XXXXXX')") cat <<EOD Config file: $config_file EOD sed -n -e 's/^sqlalchemy\.url *= */Database URL: /p' "$config_file" cat <<EOD Working dir: $temp Repository: $source_repo Upgrade from: $from_rev_hash (${from_rev:-current}) Upgrade to: $to_rev_hash (${to_rev:-current}) Extra packages: ${EXTRA:-(none)} EOD mkdir "$temp/repos" # empty # Enable caching for old pip versions (this will cache the pip upgrade) # Newer pip versions cache automatically, and don't use this variable. if [ ! "$PIP_DOWNLOAD_CACHE" ]; then export PIP_DOWNLOAD_CACHE=$HOME/.cache/pip/legacy fi install_kallithea() { local prefix=$1 local rev=$2 announce "Installing Kallithea $rev in $prefix..." "${VIRTUALENV:-virtualenv}" --quiet "$prefix-env" HG archive --rev "$rev" "$prefix" ( cd "$prefix" . "$prefix-env/bin/activate" pip install --quiet --upgrade pip setuptools mercurial $EXTRA pip install --quiet -e . ) } install_kallithea "$temp/from" "$from_rev_hash" ( cd "$temp/from" . "$temp/from-env/bin/activate" announce "Initializing database..." quiet_if_ok kallithea-cli db-create -c "$config_file" --repos="$temp/repos" --user=doe --email=doe@example.com --password=123456 --no-public-access --force-yes alembic -c "$config_file" current -v ) install_kallithea "$temp/to" "$to_rev_hash" ( cd "$temp/to" . "$temp/to-env/bin/activate" announce "Commencing database upgrade from shown Alembic revision to head..." alembic -c "$config_file" current -v alembic -c "$config_file" upgrade head announce "Upgrade complete, now at the shown Alembic revision:" alembic -c "$config_file" current -v )