diff --git a/fabfile/__init__.py b/fabfile/__init__.py index 5ef046458f..3ed6c7dfda 100644 --- a/fabfile/__init__.py +++ b/fabfile/__init__.py @@ -7,6 +7,7 @@ import databases as database import platforms as platform import webservers as webserver import django +import mayan_edms from conf import print_supported_configs from server_config import servers @@ -46,7 +47,15 @@ def install(): webserver.install_site() webserver.restart() platform.post_install() - + + +@task +def upgrade(): + """ + Perform a Mayan EDMS installation upgrade + """ + mayan_edms.upgrade() + @task def uninstall(): diff --git a/fabfile/mayan_edms/__init__.py b/fabfile/mayan_edms/__init__.py new file mode 100644 index 0000000000..a2d36150e4 --- /dev/null +++ b/fabfile/mayan_edms/__init__.py @@ -0,0 +1,50 @@ +from distutils.version import LooseVersion +import importlib + +from fabric.api import env, task, cd, sudo, settings +from fabric.colors import green, red + +from ..conf import setup_environment + + +@task +def upgrade(): + """ + Upgrade a Mayan EDMS installation, but doing incremental upgrades + """ + setup_environment() + print(green('Upgrading Mayan EDMS database', bold=True)) + + with settings(warn_only=True): + with cd(env.virtualenv_path): + version = sudo('source bin/activate; python -c "import os;os.environ[\'DJANGO_SETTINGS_MODULE\']=\'mayan.settings\';from django.core.management import setup_environ;import settings;setup_environ(settings);import main;print main.__version__"') + + if version.failed: + print(red('Unable to determined the current version.', bold=True)) + exit() + + current_verision = 'v%s' % version + print(green('Current version: %s' % version, bold=True)) + + with settings(warn_only=True): + with cd(env.repository_name): + tags = sudo('git tag').split('\r\n') + + if tags.failed: + print(red('Upgrading is only support on git based installations.', bold=True)) + exit() + + tags.sort(key=LooseVersion) + + latest_version = tags[-1] + print(green('Latest version: %s' % latest_version, bold=True)) + + upgrade_steps = tags.index(latest_version) - tags.index(current_verision) + if not upgrade_steps: + print(green('Already in the latest version, no need to upgrade.', bold=True)) + exit() + else: + print(green('Upgrade steps needed until latest version: %d' % (), bold=True)) + version_module_name = current_verision.replace('.', '_') + module = importlib.import_module('fabfile.mayan_edms.upgrades.%s' % version_module_name) + module.upgrade() diff --git a/fabfile/mayan_edms/upgrades/__init__.py b/fabfile/mayan_edms/upgrades/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/fabfile/mayan_edms/upgrades/v0_12_2.py b/fabfile/mayan_edms/upgrades/v0_12_2.py new file mode 100644 index 0000000000..b6586f1c3d --- /dev/null +++ b/fabfile/mayan_edms/upgrades/v0_12_2.py @@ -0,0 +1,14 @@ +from fabric.api import env, task, cd, sudo, settings +from fabric.colors import green, red + +from ..conf import setup_environment + + +@task +def upgrade(): + """ + Upgrade a Mayan EDMS installation from version v0.12.2 to v0.12.3 + """ + setup_environment() + print(green('Upgrading Mayan EDMS database from version 0.12.2 to 0.12.3', bold=True)) + #TODO: upgrade steps