Clean app_upgrade

This commit is contained in:
Kload 2013-10-09 00:04:52 +02:00
parent ad43f3ee6f
commit b5f8a8c0fd

View file

@ -240,76 +240,60 @@ def app_upgrade(app, url=None, file=None):
raise YunoHostError(1, _("No app to upgrade")) raise YunoHostError(1, _("No app to upgrade"))
upgraded_apps = [] upgraded_apps = []
# If no app is specified, upgrade all apps
if not app: if not app:
unique_app_id_list = os.listdir(apps_setting_path) app = os.listdir(apps_setting_path)
for unique_app_id in unique_app_id_list:
app_id = unique_app_id[:unique_app_id.find('__')]
if app_id not in app:
app.append(app_id)
for app_id in app: for app_id in app:
instance_number = _installed_instance_number(app_id) installed = _is_installed(app_id)
if instance_number == 0: if not installed:
raise YunoHostError(1, app_id + _(" is not installed")) raise YunoHostError(1, app_id + _(" is not installed"))
elif not instance:
instance = range(1, instance_number + 1)
for number in instance: if app_id in upgraded_apps:
if int(number) > instance_number: raise YunoHostError(1, _("Conflict, multiple upgrades of the same app: ")+ app_id +' (instance n°'+ number +')')
continue
number = str(number)
unique_app_id = app_id +'__'+ number
if unique_app_id in upgraded_apps:
raise YunoHostError(1, _("Conflict, multiple upgrades of the same app: ")+ app_id +' (instance n°'+ number +')')
current_app_dict = app_info(app_id, instance=number, raw=True) #TODO: fix that (and check for instance number)
new_app_dict = app_info(app_id, raw=True) current_app_dict = app_info(app_id, instance=number, raw=True)
new_app_dict = app_info(app_id, raw=True)
if file: if file:
manifest = _extract_app_from_file(file) manifest = _extract_app_from_file(file)
elif url: elif url:
manifest = _fetch_app_from_git(url) manifest = _fetch_app_from_git(url)
elif (new_app_dict['lastUpdate'] > current_app_dict['lastUpdate']) or ('update_time' not in current_app_dict['settings'] and (new_app_dict['lastUpdate'] > current_app_dict['settings']['install_time'])) or ('update_time' in current_app_dict['settings'] and (new_app_dict['lastUpdate'] > current_app_dict['settings']['update_time'])): elif (new_app_dict['lastUpdate'] > current_app_dict['lastUpdate']) or ('update_time' not in current_app_dict['settings'] and (new_app_dict['lastUpdate'] > current_app_dict['settings']['install_time'])) or ('update_time' in current_app_dict['settings'] and (new_app_dict['lastUpdate'] > current_app_dict['settings']['update_time'])):
manifest = _fetch_app_from_git(app_id) manifest = _fetch_app_from_git(app_id)
else: else:
continue continue
app_final_path = apps_path +'/'+ unique_app_id
script_var_dict = {
'SCRIPT_DIR': app_tmp_folder,
'APP_DIR': app_final_path,
'APP_ID': unique_app_id,
'APP_INSTANCE': number
}
######################################### #########################################
# Execute App install script # # Execute App upgrade script #
######################################### #########################################
_exec_app_script(step='upgrade', path=app_tmp_folder +'/scripts', var_dict=script_var_dict, parameters=manifest['parameters']) _exec_app_script(step='upgrade', path=app_tmp_folder +'/scripts', var_dict={}, parameters=manifest['parameters'])
######################################### #########################################
# Write App settings # # Write App settings #
######################################### #########################################
app_setting_path = apps_setting_path +'/'+ unique_app_id app_setting_path = apps_setting_path +'/'+ app_id
current_app_dict['settings']['update_time'] = int(time.time()) current_app_dict['settings']['update_time'] = int(time.time())
with open(app_setting_path +'/settings.yml', 'w') as f: with open(app_setting_path +'/settings.yml', 'w') as f:
yaml.safe_dump(current_app_dict['settings'], f, default_flow_style=False) yaml.safe_dump(current_app_dict['settings'], f, default_flow_style=False)
win_msg(_("App setting file updated")) win_msg(_("App setting file updated"))
os.system('mv "'+ app_final_path +'/manifest.json" "'+ app_final_path +'/scripts" '+ app_setting_path) os.system('mv "'+ app_tmp_folder +'/*" '+ app_setting_path)
######################################### #########################################
# So much win # # So much win #
######################################### #########################################
upgraded_apps.append(unique_app_id) upgraded_apps.append(unique_app_id)
win_msg(app_id + _(" upgraded successfully")) win_msg(app_id + _(" upgraded successfully"))
if not upgraded_apps: if not upgraded_apps:
raise YunoHostError(1, _("No app to upgrade")) raise YunoHostError(1, _("No app to upgrade"))