diff --git a/scripts/upgrade_oniro/upgrade_oniro.py b/scripts/upgrade_oniro/upgrade_oniro.py index a4378377c98114da08b8208be2a84d01af55b225..ed330c6df81efb75be881f4738e82ac6fccd2026 100644 --- a/scripts/upgrade_oniro/upgrade_oniro.py +++ b/scripts/upgrade_oniro/upgrade_oniro.py @@ -55,18 +55,18 @@ command = "" # Upgrade options target_version = "" -build_directory = pathlib.Path() +build_directory = None machine = "" flavour = "" image = "" -conf_directory = pathlib.Path() +conf_directory = None dry_run = False store_backup = False # Backup options # Restore options -backup_archive_path = "" +backup_archive_arg = "" # Global vars backup_archive_name = "" @@ -104,7 +104,7 @@ def init_script_options(): # Restore subcommand restore_parser = subparsers.add_parser("restore", help="Restore a local backup.") - restore_parser.add_argument("backup_archive_path", type=str, + restore_parser.add_argument("backup_archive_arg", type=str, help="Specify the path of a local backup archive to restore. Use 'latest' to use the latest backup found.") parsed_args = vars(parser.parse_args()) @@ -126,8 +126,8 @@ def init_script_options(): # TODO print("WIP") elif command == "restore": - global backup_archive_path - backup_archive_path = parsed_args["backup_archive_path"] + global backup_archive_arg + backup_archive_arg = parsed_args["backup_archive_arg"] def upgrade_tool(): # TODO @@ -144,12 +144,14 @@ def backup_oniro(): # - If build_directory is not empty, backup its content excluding tmp* and tmp-newlib* directories # TODO add function description # TODO add more verbose log + # TODO add an option to backup build directories / DV layers ? from upgrade_oniro_utils import get_manifest_projects from datetime import datetime backup_folders = [layer["path"] for layer in get_manifest_projects()] # add all manifest layers backup_folders.append(".repo") - if build_directory.exists(): + + if build_directory and build_directory.exists(): for child in build_directory.iterdir(): if child.is_dir() and "tmp" not in child.name and child.name != "downloads": backup_folders.append(f"{build_directory.name}/{child.name}") @@ -169,9 +171,8 @@ def backup_oniro(): # Remove the uncompressed copy of backup_folders os.remove("backup_folders") - # Save the name of the backup for later use in the script - global backup_archive_name - backup_archive_name = archive_name + print(f"Backup created at {archive_name}") + return def restore_oniro(): @@ -180,6 +181,15 @@ def restore_oniro(): # TODO add a subcommand to restore oniro from a backup # TODO add an exception handling if the metadata file is not found import shutil + from upgrade_oniro_utils import find_latest_backup + + if backup_archive_arg == "latest": + backup_archive_name = find_latest_backup() + + if os.path.exists(backup_archive_arg): + # TODO add a check to be sure that the selected path is actually a Oniro backup + backup_archive_name = backup_archive_arg + print(f"Restoring {backup_archive_name}") with tarfile.open(backup_archive_name) as backup_archive: # Extract the metadata file and delete all the old folders @@ -203,7 +213,16 @@ def upgrade_oniro(): if __name__ == "__main__": init_script_options() upgrade_tool() - perform_pre_upgrade_checks() - backup_oniro() - restore_oniro() - upgrade_oniro() \ No newline at end of file + + if command == "upgrade": + perform_pre_upgrade_checks() + backup_oniro() + restore_oniro() + upgrade_oniro() + + elif command == "backup": + backup_oniro() + + elif command == "restore": + restore_oniro() + \ No newline at end of file