51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
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()
|