import traceback from cpl_cli.configuration.version_settings_name_enum import VersionSettingsNameEnum from cpl_cli.configuration.workspace_settings import WorkspaceSettings from cpl_core.application.application_abc import ApplicationABC from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.console.console import Console from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_core.pipes.version_pipe import VersionPipe from set_version.git_service import GitService from set_version.version_setter_service import VersionSetterService class Application(ApplicationABC): def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): ApplicationABC.__init__(self, config, services) self._workspace: WorkspaceSettings = config.get_configuration(WorkspaceSettings) self._git_service: GitService = self._services.get_service(GitService) self._version_setter: VersionSetterService = self._services.get_service(VersionSetterService) self._version_pipe: VersionPipe = self._services.get_service(VersionPipe) def configure(self): self._configuration.parse_console_arguments(self._services) def main(self): Console.write_line('Set versions:') args = self._configuration.additional_arguments version = {} branch = "" suffix = "" if len(args) > 1: Console.error(f'Unexpected argument(s): {", ".join(args[1:])}') return if len(args) == 1: suffix = f'.{args[0]}' try: branch = self._git_service.get_active_branch_name() Console.write_line(f'Found branch: {branch}') except Exception as e: Console.error('Branch could not be found', traceback.format_exc()) return try: version[VersionSettingsNameEnum.major.value] = branch.split('.')[0] version[VersionSettingsNameEnum.minor.value] = branch.split('.')[1] version[VersionSettingsNameEnum.micro.value] = f'{branch.split(".")[2]}{suffix}' except Exception as e: Console.error(f'Branch {branch} does not contain valid version') return try: for project in self._workspace.projects: if not project.startswith('cpl'): continue Console.write_line(f'Set version {self._version_pipe.transform(version)} for {project}') self._version_setter.set_version(self._workspace.projects[project], version) except Exception as e: Console.error('Version could not be set', traceback.format_exc()) return