diff --git a/src/mpsd_software_manager/mpsd_software.py b/src/mpsd_software_manager/mpsd_software.py index 59504e71def83dcb27561f2690c036dc9afbfc8a..cf6aaac7a4c2deca168ddff8601a4c5f68511991 100755 --- a/src/mpsd_software_manager/mpsd_software.py +++ b/src/mpsd_software_manager/mpsd_software.py @@ -476,9 +476,10 @@ def get_available_package_sets(mpsd_release: str) -> List[str]: """ logging.debug(f"get_available_package_sets({mpsd_release=})") - logging.info(f"Retrieving available package_sets for release {mpsd_release}") print_log = logging.getLogger("print") + logging.info(f"Retrieving available package_sets for release {mpsd_release}") + # create temporary directory tmp_dir = tempfile.TemporaryDirectory(prefix="mpsd-software-available-") tmp_dir_path = Path(tmp_dir.name) @@ -755,6 +756,28 @@ def clone_repo( run(["git", "pull"], check=True, capture_output=capture_output) +def get_available_releases(print_result: bool = False) -> List[str]: + """ + Return available MPSD software release versions. + + Example + ------- + >>> get_available_releases() + ["dev-23a"] + + Notes + ----- + This needs to be updated when a new version (such as 23b) is released. + """ + releases = ["dev-23a"] + print_log = logging.getLogger("print") + if print_result: + print_log.info("Available MPSD software releases:") + for release in releases: + print_log.info(f" {release}") + return releases + + def get_release_info(mpsd_release: str, root_dir: Path) -> Tuple[str, str, List[str]]: """ Get information about the specified release. @@ -1303,13 +1326,22 @@ def main(): ) else: - # all commands except init need a release version - if cmd != "init": + # most commands except need a release version + if cmd in ["install", "prepare", "reinstall", "remove", "status"]: subp.add_argument( "release", type=str, help="Release version to prepare, install, reinstall or remove", ) + elif cmd in ["available"]: + # for some commands the release version is optional + subp.add_argument( + "release", + type=str, + nargs="?", + help="Release version to prepare, install, reinstall or remove", + ) + if cmd in ["install", "reinstall", "remove"]: # "install" command needs additional documentation package_set_help = ( @@ -1347,20 +1379,30 @@ def main(): initialise_environment(Path(os.getcwd())) sys.exit(0) - # sanity check for common mistakes in command line arguments - if args.release.endswith("/"): # happens easily with autocompletion - args.release = args.release.removesuffix("/") - logging.warning(f"Removed trailing slash from release: {args.release}") + # if a release version is specified: + if args.release: + # sanity check for common mistakes in command line arguments + if args.release.endswith("/"): # happens easily with autocompletion + args.release = args.release.removesuffix("/") + logging.warning(f"Removed trailing slash from release: {args.release}") # root_dir is the place where this MPSD software instance has its root root_dir = get_root_dir() - # set up logging ( with file handler) for all actions (except init) - log_file = get_log_file_path( - args.release, - args.action, - root_dir, - ) + # set up logging filename: we record activities that change the installation + if args.action in ["init", "install", "reinstall", "remove"]: + log_file = get_log_file_path( + args.release, + args.action, + root_dir, + ) + # some commands do not write any log_files: + elif args.action in ["available", "status"]: + log_file = None + else: + # sanity check + raise NotImplementedError(f"Should never happen: unknown {args.action=}") + set_up_logging( args.loglevel, log_file, @@ -1380,7 +1422,11 @@ def main(): elif args.action == "prepare": prepare_environment(args.release, root_dir) elif args.action == "available": - get_available_package_sets(args.release) + if args.release: + get_available_package_sets(args.release) + else: + get_available_releases(print_result=True) + sys.exit(0) else: message = ( f"No known action found ({args.action=}). Should probably never happen." diff --git a/tests/test_mpsd_software.py b/tests/test_mpsd_software.py index ac72dac9ec5f2310296fe62206196c33c176abfe..982a0a9c1d39090ef4b8f1f5ec07726a3579631a 100644 --- a/tests/test_mpsd_software.py +++ b/tests/test_mpsd_software.py @@ -564,6 +564,14 @@ def test_get_root_dir(tmp_path): assert root_dir == sub_dir +def test_get_available_releases(): + res = mod.get_available_releases() + assert "dev-23a" in res + assert len(res) >= 1 + for release in res: + assert isinstance(release, str) + + def test_interface(tmp_path): """Test other things (not implemented yet).""" pass