2
0
mirror of https://github.com/frappe/bench.git synced 2025-01-10 00:37:51 +00:00

[fix] bench update --upgrade --force option to force running of pre and post upgrade operations

This commit is contained in:
Anand Doshi 2015-08-17 15:58:01 +05:30
parent 35e58a7c2e
commit 6e26f74250
3 changed files with 44 additions and 39 deletions

View File

@ -98,8 +98,9 @@ def is_version_upgrade(bench='.', branch=None):
upstream_version = get_major_version(upstream_version) upstream_version = get_major_version(upstream_version)
if upstream_version - local_version > 0: if upstream_version - local_version > 0:
return (local_version, upstream_version) return (True, local_version, upstream_version)
return False
return (False, local_version, upstream_version)
def get_current_frappe_version(bench='.'): def get_current_frappe_version(bench='.'):
try: try:
@ -145,8 +146,8 @@ def switch_branch(branch, apps=None, bench='.', upgrade=False):
import utils import utils
apps_dir = os.path.join(bench, 'apps') apps_dir = os.path.join(bench, 'apps')
version_upgrade = is_version_upgrade(bench=bench, branch=branch) version_upgrade = is_version_upgrade(bench=bench, branch=branch)
if version_upgrade and not upgrade: if version_upgrade[0] and not upgrade:
raise MajorVersionUpgradeException("Switching to {0} will cause upgrade from {1} to {2}. Pass --upgrade to confirm".format(branch, version_upgrade[0], version_upgrade[1]), version_upgrade[0], version_upgrade[1]) raise MajorVersionUpgradeException("Switching to {0} will cause upgrade from {1} to {2}. Pass --upgrade to confirm".format(branch, version_upgrade[1], version_upgrade[2]), version_upgrade[1], version_upgrade[2])
if not apps: if not apps:
apps = ('frappe', 'erpnext', 'shopping_cart') apps = ('frappe', 'erpnext', 'shopping_cart')
@ -160,14 +161,14 @@ def switch_branch(branch, apps=None, bench='.', upgrade=False):
exec_cmd("git checkout {branch}".format(branch=branch), cwd=app_dir) exec_cmd("git checkout {branch}".format(branch=branch), cwd=app_dir)
exec_cmd("git merge upstream/{branch}".format(branch=branch), cwd=app_dir) exec_cmd("git merge upstream/{branch}".format(branch=branch), cwd=app_dir)
if version_upgrade and upgrade: if version_upgrade[0] and upgrade:
update_requirements() update_requirements()
pre_upgrade(version_upgrade[0], version_upgrade[1]) pre_upgrade(version_upgrade[1], version_upgrade[2])
reload(utils) reload(utils)
backup_all_sites() backup_all_sites()
patch_sites() patch_sites()
build_assets() build_assets()
post_upgrade(version_upgrade[0], version_upgrade[1]) post_upgrade(version_upgrade[1], version_upgrade[2])
def switch_to_master(apps=None, bench='.', upgrade=False): def switch_to_master(apps=None, bench='.', upgrade=False):
switch_branch('master', apps=apps, bench=bench, upgrade=upgrade) switch_branch('master', apps=apps, bench=bench, upgrade=upgrade)

View File

@ -155,9 +155,9 @@ def bench(bench='.'):
@click.option('--apps_path', default=None, help="path to json files with apps to install after init") @click.option('--apps_path', default=None, help="path to json files with apps to install after init")
@click.option('--frappe-path', default=None, help="path to frappe repo") @click.option('--frappe-path', default=None, help="path to frappe repo")
@click.option('--frappe-branch', default=None, help="path to frappe repo") @click.option('--frappe-branch', default=None, help="path to frappe repo")
@click.option('--no-procfile', flag_value=True, type=bool, help="Pull changes in all the apps in bench") @click.option('--no-procfile', is_flag=True, help="Pull changes in all the apps in bench")
@click.option('--no-backups',flag_value=True, type=bool, help="Run migrations for all sites in the bench") @click.option('--no-backups',is_flag=True, help="Run migrations for all sites in the bench")
@click.option('--no-auto-update',flag_value=True, type=bool, help="Build JS and CSS artifacts for the bench") @click.option('--no-auto-update',is_flag=True, help="Build JS and CSS artifacts for the bench")
def init(path, apps_path, frappe_path, frappe_branch, no_procfile, no_backups, def init(path, apps_path, frappe_path, frappe_branch, no_procfile, no_backups,
no_auto_update): no_auto_update):
"Create a new bench" "Create a new bench"
@ -189,16 +189,17 @@ def new_site(site, mariadb_root_password=None, admin_password=None):
#TODO: Not DRY #TODO: Not DRY
@click.command('update') @click.command('update')
@click.option('--pull', flag_value=True, type=bool, help="Pull changes in all the apps in bench") @click.option('--pull', is_flag=True, help="Pull changes in all the apps in bench")
@click.option('--patch',flag_value=True, type=bool, help="Run migrations for all sites in the bench") @click.option('--patch',is_flag=True, help="Run migrations for all sites in the bench")
@click.option('--build',flag_value=True, type=bool, help="Build JS and CSS artifacts for the bench") @click.option('--build',is_flag=True, help="Build JS and CSS artifacts for the bench")
@click.option('--bench',flag_value=True, type=bool, help="Update bench") @click.option('--bench',is_flag=True, help="Update bench")
@click.option('--requirements',flag_value=True, type=bool, help="Update requirements") @click.option('--requirements',is_flag=True, help="Update requirements")
@click.option('--restart-supervisor',flag_value=True, type=bool, help="restart supervisor processes after update") @click.option('--restart-supervisor',is_flag=True, help="restart supervisor processes after update")
@click.option('--auto',flag_value=True, type=bool) @click.option('--auto',is_flag=True)
@click.option('--upgrade',flag_value=True, type=bool) @click.option('--upgrade',is_flag=True)
@click.option('--no-backup',flag_value=True, type=bool) @click.option('--no-backup',is_flag=True)
def _update(pull=False, patch=False, build=False, bench=False, auto=False, restart_supervisor=False, requirements=False, no_backup=False, upgrade=False): @click.option('--force',is_flag=True)
def _update(pull=False, patch=False, build=False, bench=False, auto=False, restart_supervisor=False, requirements=False, no_backup=False, upgrade=False, force=False):
"Update bench" "Update bench"
if not (pull or patch or build or bench or requirements): if not (pull or patch or build or bench or requirements):
@ -208,14 +209,14 @@ def _update(pull=False, patch=False, build=False, bench=False, auto=False, resta
version_upgrade = is_version_upgrade() version_upgrade = is_version_upgrade()
if version_upgrade and not upgrade: if version_upgrade[0] and not upgrade:
print print
print print
print "This update will cause a major version change in Frappe/ERPNext from {0} to {1}.".format(*version_upgrade) print "This update will cause a major version change in Frappe/ERPNext from {0} to {1}.".format(*version_upgrade[1:])
print "This would take significant time to migrate and might break custom apps. Please run `bench update --upgrade` to confirm." print "This would take significant time to migrate and might break custom apps. Please run `bench update --upgrade` to confirm."
print print
# print "You can also pin your bench to {0} by running `bench swtich-to-v{0}`".format(version_upgrade[0]) # print "You can also pin your bench to {0} by running `bench swtich-to-v{0}`".format(version_upgrade[0])
print "You can stay on the latest stable release by running `bench switch-to-master` or pin your bench to {0} by running `bench swtich-to-v{0}`".format(version_upgrade[0]) print "You can stay on the latest stable release by running `bench switch-to-master` or pin your bench to {0} by running `bench swtich-to-v{0}`".format(version_upgrade[1])
sys.exit(1) sys.exit(1)
if conf.get('release_bench'): if conf.get('release_bench'):
@ -237,20 +238,20 @@ def _update(pull=False, patch=False, build=False, bench=False, auto=False, resta
'upgrade': upgrade 'upgrade': upgrade
}) })
update(pull, patch, build, bench, auto, restart_supervisor, requirements, no_backup, upgrade) update(pull, patch, build, bench, auto, restart_supervisor, requirements, no_backup, upgrade, force=force)
print "_"*80 print "_"*80
print "https://frappe.io/buy - Donate to help make better free and open source tools" print "https://frappe.io/buy - Donate to help make better free and open source tools"
print print
def update(pull=False, patch=False, build=False, bench=False, auto=False, restart_supervisor=False, requirements=False, no_backup=False, upgrade=False, bench_path='.'): def update(pull=False, patch=False, build=False, bench=False, auto=False, restart_supervisor=False, requirements=False, no_backup=False, upgrade=False, bench_path='.', force=False):
conf = get_config(bench=bench_path) conf = get_config(bench=bench_path)
version_upgrade = is_version_upgrade(bench=bench_path) version_upgrade = is_version_upgrade(bench=bench_path)
if version_upgrade and not upgrade: if version_upgrade[0] and not upgrade:
raise Exception("Major Version Upgrade") raise Exception("Major Version Upgrade")
if upgrade: if upgrade and (version_upgrade[0] or (not version_upgrade[0] and force)):
validate_upgrade(version_upgrade[0], version_upgrade[1], bench=bench_path) validate_upgrade(version_upgrade[1], version_upgrade[2], bench=bench_path)
if pull: if pull:
pull_all_apps(bench=bench_path) pull_all_apps(bench=bench_path)
@ -258,8 +259,8 @@ def update(pull=False, patch=False, build=False, bench=False, auto=False, restar
if requirements: if requirements:
update_requirements(bench=bench_path) update_requirements(bench=bench_path)
if upgrade: if upgrade and (version_upgrade[0] or (not version_upgrade[0] and force)):
pre_upgrade(version_upgrade[0], version_upgrade[1], bench=bench_path) pre_upgrade(version_upgrade[1], version_upgrade[2], bench=bench_path)
import utils, app import utils, app
reload(utils) reload(utils)
reload(app) reload(app)
@ -270,8 +271,8 @@ def update(pull=False, patch=False, build=False, bench=False, auto=False, restar
patch_sites(bench=bench_path) patch_sites(bench=bench_path)
if build: if build:
build_assets(bench=bench_path) build_assets(bench=bench_path)
if upgrade: if upgrade and (version_upgrade[0] or (not version_upgrade[0] and force)):
post_upgrade(version_upgrade[0], version_upgrade[1], bench=bench_path) post_upgrade(version_upgrade[1], version_upgrade[2], bench=bench_path)
if restart_supervisor or conf.get('restart_supervisor_on_update'): if restart_supervisor or conf.get('restart_supervisor_on_update'):
restart_supervisor_processes(bench=bench_path) restart_supervisor_processes(bench=bench_path)
@ -297,7 +298,7 @@ def restart():
restart_supervisor_processes() restart_supervisor_processes()
@click.command('start') @click.command('start')
@click.option('--no-dev', flag_value=True, type=bool) @click.option('--no-dev', is_flag=True)
def start(no_dev=False): def start(no_dev=False):
"Start Frappe development processes" "Start Frappe development processes"
_start(no_dev=no_dev) _start(no_dev=no_dev)
@ -312,7 +313,7 @@ def migrate_3to4(path):
site=path)) site=path))
@click.command('switch-to-master') @click.command('switch-to-master')
@click.option('--upgrade',flag_value=True, type=bool) @click.option('--upgrade',is_flag=True)
def _switch_to_master(upgrade=False): def _switch_to_master(upgrade=False):
"Switch frappe and erpnext to master branch" "Switch frappe and erpnext to master branch"
switch_to_master(upgrade=upgrade) switch_to_master(upgrade=upgrade)
@ -321,7 +322,7 @@ def _switch_to_master(upgrade=False):
print 'Please run `bench update --patch` to be safe from any differences in database schema' print 'Please run `bench update --patch` to be safe from any differences in database schema'
@click.command('switch-to-develop') @click.command('switch-to-develop')
@click.option('--upgrade',flag_value=True, type=bool) @click.option('--upgrade',is_flag=True)
def _switch_to_develop(upgrade=False): def _switch_to_develop(upgrade=False):
"Switch frappe and erpnext to develop branch" "Switch frappe and erpnext to develop branch"
switch_to_develop(upgrade=upgrade) switch_to_develop(upgrade=upgrade)
@ -330,7 +331,7 @@ def _switch_to_develop(upgrade=False):
print 'Please run `bench update --patch` to be safe from any differences in database schema' print 'Please run `bench update --patch` to be safe from any differences in database schema'
@click.command('switch-to-v4') @click.command('switch-to-v4')
@click.option('--upgrade',flag_value=True, type=bool) @click.option('--upgrade',is_flag=True)
def _switch_to_v4(upgrade=False): def _switch_to_v4(upgrade=False):
"Switch frappe and erpnext to v4 branch" "Switch frappe and erpnext to v4 branch"
switch_to_v4(upgrade=upgrade) switch_to_v4(upgrade=upgrade)
@ -466,8 +467,8 @@ def setup_env():
_setup_env() _setup_env()
@click.command('procfile') @click.command('procfile')
@click.option('--with-watch', flag_value=True, type=bool) @click.option('--with-watch', is_flag=True)
@click.option('--with-celery-broker', flag_value=True, type=bool) @click.option('--with-celery-broker', is_flag=True)
def setup_procfile(with_celery_broker, with_watch): def setup_procfile(with_celery_broker, with_watch):
"Setup Procfile for bench start" "Setup Procfile for bench start"
_setup_procfile(with_celery_broker, with_watch) _setup_procfile(with_celery_broker, with_watch)

View File

@ -524,7 +524,6 @@ def post_upgrade(from_ver, to_ver, bench='.'):
generate_redis_cache_config(bench=bench) generate_redis_cache_config(bench=bench)
generate_supervisor_config(bench=bench) generate_supervisor_config(bench=bench)
generate_nginx_config(bench=bench) generate_nginx_config(bench=bench)
setup_procfile(bench=bench)
setup_backups(bench=bench) setup_backups(bench=bench)
if from_ver <= 5 and to_ver == 6: if from_ver <= 5 and to_ver == 6:
@ -537,6 +536,10 @@ def post_upgrade(from_ver, to_ver, bench='.'):
print "sudo service nginx restart" print "sudo service nginx restart"
print "sudo supervisorctl reload" print "sudo supervisorctl reload"
if (to_ver >= 5):
# For dev server. Always set this up incase someone wants to start a dev server.
setup_procfile(bench=bench)
def update_translations_p(args): def update_translations_p(args):
update_translations(*args) update_translations(*args)