diff --git a/lib/yunohost/backup.py b/lib/yunohost/backup.py index 8fee951fe..0e9ab63c5 100644 --- a/lib/yunohost/backup.py +++ b/lib/yunohost/backup.py @@ -284,7 +284,8 @@ def backup_restore(name, hooks=[], apps=[], ignore_apps=False, ignore_hooks=Fals from yunohost.hook import hook_exec # Retrieve and open the archive - archive_file = backup_info(name)['path'] + info = backup_info(name) + archive_file = info['path'] try: tar = tarfile.open(archive_file, "r:gz") except: @@ -348,8 +349,16 @@ def backup_restore(name, hooks=[], apps=[], ignore_apps=False, ignore_hooks=Fals # Run hooks if not ignore_hooks: + if hooks is None or len(hooks)==0: + hooks=info['hooks'].keys() + + hooks_filtered=list(set(hooks) & set(info['hooks'].keys())) + hooks_unexecuted=set(hooks) - set(info['hooks'].keys()) + for hook in hooks_unexecuted: + logger.warning("hook '%s' not in this backup", hook) + msignals.display(m18n.n('backup_hook_unavailable', hook), 'warning') msignals.display(m18n.n('restore_running_hooks')) - hook_callback('restore', hooks, args=[tmp_dir]) + hook_callback('restore', hooks_filtered, args=[tmp_dir]) # Add apps restore hook if not ignore_apps: diff --git a/locales/en.json b/locales/en.json index 286d7257b..ba4e6b072 100644 --- a/locales/en.json +++ b/locales/en.json @@ -155,6 +155,7 @@ "backup_cleaning_failed" : "Unable to clean backup directory", "backup_complete" : "Backup complete", "backup_invalid_archive" : "Invalid backup archive", + "backup_hook_unavailable" : "The hook '{:s}' is not in this backup", "restore_confirm_yunohost_installed" : "Do you really want to restore an already installed system? [{answers:s}]", "restore_app_failed" : "Unable to restore the app '{app:s}'", "restore_running_hooks" : "Running restoration hooks...",