diff --git a/hb_new/containers/arg.py b/hb_new/containers/arg.py index 2faf54fd99d9dbef7682b8846e0f21c6a4589b70..a446e4636779465d57211aa0dcaa513be9d528d0 100755 --- a/hb_new/containers/arg.py +++ b/hb_new/containers/arg.py @@ -31,6 +31,7 @@ from util.logUtil import LogUtil from util.ioUtil import IoUtil from util.typeCheckUtil import TypeCheckUtil from resolver.argsFactory import ArgsFactory +from containers.status import throw_exception class ModuleType(): @@ -159,6 +160,7 @@ class Arg(): self._resolveFuntion = value @staticmethod + @throw_exception def createInstanceByDict(data: dict): arg_name = str(data['argName']).replace("-", "_")[2:] arg_help = str(data['argHelp']) @@ -177,7 +179,7 @@ class Arg(): elif arg_type == ArgType.DICT: arg_value = dict(data['argDefault']) else: - raise OHOSException('Unknown arg type') + raise OHOSException('Unknown arg type "{}" for arg "{}"'.format(arg_type, arg_name), "0003") resolveFuntion = data['resolveFuntion'] return Arg(arg_name, arg_help, arg_phase, arg_attibute, arg_type, arg_value, resolveFuntion) @@ -215,6 +217,7 @@ class Arg(): return args_dict @staticmethod + @throw_exception def write_args_file(key: str, value, module_type: ModuleType): args_file_path = '' if module_type == ModuleType.BUILD: @@ -223,12 +226,14 @@ class Arg(): args_file_path = CURRENT_SET_ARGS else: raise OHOSException( - 'There is no such module {}'.format(module_type)) + 'You are trying to write args file, but there is no corresponding module "{}" args file' + .format(module_type), "0002") args_file = Arg.read_args_file(module_type) args_file[key]["argDefault"] = value IoUtil.dump_json_file(args_file_path, args_file) @staticmethod + @throw_exception def read_args_file(module_type: ModuleType): args_file_path = '' default_file_path = '' @@ -240,7 +245,8 @@ class Arg(): default_file_path = DEFAULT_SET_ARGS else: raise OHOSException( - 'There is no such module {}'.format(module_type)) + 'You are trying to write args file, but there is no corresponding module "{}" args file' + .format(module_type), "0002") if not os.path.exists(args_file_path): IoUtil.copy_file(src=default_file_path, dst=args_file_path) return IoUtil.read_json_file(args_file_path) diff --git a/hb_new/resolver/argsFactory.py b/hb_new/resolver/argsFactory.py index bdb15fb2d32e3a3074852dd22b7b4c087e744336..33f2d5a0073697e30637d580709e285298bc02c7 100755 --- a/hb_new/resolver/argsFactory.py +++ b/hb_new/resolver/argsFactory.py @@ -19,11 +19,13 @@ import argparse from exceptions.ohosException import OHOSException +from containers.status import throw_exception class ArgsFactory(): @staticmethod + @throw_exception def genenic_add_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser: if arg['argType'] == 'bool': return _add_bool_option(parser, arg) @@ -34,8 +36,8 @@ class ArgsFactory(): elif arg['argType'] == 'gate': return _add_gate_option(parser, arg) else: - raise OHOSException( - 'Unknown arg type of {}'.format(arg['argType'])) + raise OHOSException('Unknown arg type "{}" for arg "{}"' + .format(arg['argType'], arg['argName']), "0003") def _add_bool_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser: diff --git a/hb_new/resolver/buildArgsResolver.py b/hb_new/resolver/buildArgsResolver.py index 66832ed9ed1d204c344600ee7d1fd6386126f00c..184ca1c060caa1446b5735cfde4eb1475c94b2e5 100755 --- a/hb_new/resolver/buildArgsResolver.py +++ b/hb_new/resolver/buildArgsResolver.py @@ -33,6 +33,7 @@ from util.systemUtil import SystemUtil from util.typeCheckUtil import TypeCheckUtil from util.componentUtil import ComponentUtil + class BuildArgsResolver(ArgsResolverInterface): def __init__(self, args_dict: dict): @@ -46,11 +47,10 @@ class BuildArgsResolver(ArgsResolverInterface): buildModule.args_dict['build_target'].argValue = [ 'build_ohos_sdk'] buildModule.args_dict['target_cpu'].argValue = 'arm64' - def resolveTargetCpu(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): config.target_cpu = targetArg.argValue - + @throw_exception def resolveBuildTarget(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): build_executor = buildModule.targetCompiler.unwrapped_build_executor @@ -67,17 +67,18 @@ class BuildArgsResolver(ArgsResolverInterface): ''' component_name = ComponentUtil.get_component_name(os.getcwd()) LogUtil.write_log(Config().log_path, 'In the component "{}" directory,' - 'this compilation will compile only this component'.format(component_name), + 'this compilation will compile only this component'.format( + component_name), 'warning') target_list.append(component_name) target_list.append(component_name + '_test') else: component_name = ComponentUtil.get_component_name(os.getcwd()) - component_name = os.path.basename(os.getcwd()) if component_name == '' else component_name + component_name = os.path.basename( + os.getcwd()) if component_name == '' else component_name raise OHOSException('There is no target component "{}" for the current product {}' - .format(component_name, Config().product), "4001") + .format(component_name, Config().product), "4001") build_executor.regist_arg('build_target', target_list) - def resolveLogLevel(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue == 'debug': @@ -85,25 +86,24 @@ class BuildArgsResolver(ArgsResolverInterface): targetCompiler = buildModule.targetCompiler.unwrapped_build_executor targetGenerator.regist_flag('-v', ''), targetCompiler.regist_arg('-v', '') - + @throw_exception def resolveStrictMode(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: preloader = buildModule.preloader.unwrapped_preloader loader = buildModule.loader.unwrapped_loader - if not (preloader.outputs.check_outputs() and loader.outputs.check_outputs()): - raise OHOSException('ERROR', "3002") - + if not preloader.outputs.check_outputs(): + raise OHOSException('Preloader result not correct', "1001") + if not loader.outputs.check_outputs(): + raise OHOSException('Loader result not correct ', "2001") def resolveScalableBuild(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): loader = buildModule.loader.unwrapped_loader loader.regist_arg("scalable_build", bool(targetArg.argValue)) - def resolveBuildPlatformName(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): loader = buildModule.loader.unwrapped_loader loader.regist_arg("build_platform_name", targetArg.argValue) - def resolveBuildXts(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): loader = buildModule.loader.unwrapped_loader @@ -113,7 +113,6 @@ class BuildArgsResolver(ArgsResolverInterface): loader.regist_arg(variable, bool(value)) return loader.regist_arg("build_xts", bool(targetArg.argValue)) - def resolveIgnoreApiCheck(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): loader = buildModule.loader.unwrapped_loader @@ -122,12 +121,10 @@ class BuildArgsResolver(ArgsResolverInterface): else: loader.regist_arg("ignore_api_check", [ 'xts', 'common', 'developertest']) - def resolveLoadTestConfig(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): loader = buildModule.loader.unwrapped_loader loader.regist_arg("load_test_config", bool(targetArg.argValue)) - def resolveRenameLastLog(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: @@ -136,7 +133,6 @@ class BuildArgsResolver(ArgsResolverInterface): if os.path.exists(logfile): mtime = os.stat(logfile).st_mtime os.rename(logfile, '{}/build.{}.log'.format(out_path, mtime)) - def resolveCCache(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: @@ -173,13 +169,11 @@ class BuildArgsResolver(ArgsResolverInterface): cmd = ['ccache', '-M', ccache_max_size] SystemUtil.exec_command(cmd, log_path=config.log_path) - def resolvePycache(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: gn = buildModule.targetGenerator.unwrapped_build_file_generator gn.regist_arg('pycache_enable', targetArg.argValue) - def resolveBuildType(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): targetGenerator = buildModule.targetGenerator.unwrapped_build_file_generator @@ -188,7 +182,8 @@ class BuildArgsResolver(ArgsResolverInterface): '''For historical reasons, this value must be debug ''' targetGenerator.regist_arg('ohos_build_type', 'debug') - + + # TODO: '-f' option should clean all out product def resolveFullCompilation(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: @@ -200,7 +195,7 @@ class BuildArgsResolver(ArgsResolverInterface): else: build_executor.regist_arg( 'build_target', ['make_all', 'make_test']) - + @throw_exception def resolveGnArgs(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): targetGenerator = buildModule.targetGenerator.unwrapped_build_file_generator @@ -219,8 +214,8 @@ class BuildArgsResolver(ArgsResolverInterface): value = str(value) targetGenerator.regist_arg(variable, value) except ValueError: - raise OHOSException(f'Invalid gn args: {gn_arg}') - + raise OHOSException(f'Invalid gn args: {gn_arg}', "0001") + @throw_exception def resolveExportPara(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): targetGenerator = buildModule.targetGenerator.unwrapped_build_file_generator @@ -235,8 +230,8 @@ class BuildArgsResolver(ArgsResolverInterface): value = str(value) targetGenerator.regist_arg(variable, value) except ValueError: - raise OHOSException(f'Invalid gn args: {gn_arg}') - + raise OHOSException(f'Invalid gn args: {gn_arg}', "0001") + @throw_exception def resolveTest(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if len(targetArg.argValue) > 1: @@ -248,14 +243,15 @@ class BuildArgsResolver(ArgsResolverInterface): elif test_type == "xts": targetGenerator.regist_arg('ohos_xts_test_args', test_target) else: - raise OHOSException('Option not support', "3003") - + raise OHOSException('Test type value "{}" is not support, using "--test" option like this format' + '--test xts test/xts/acts/startup_lite/bootstrap_hal:ActsBootstrapTest' + .format(test_type), "0001") def resolveKeepNinjaGoing(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: targetCompiler = buildModule.targetCompiler.unwrapped_build_executor targetCompiler.regist_arg('-k', '1000000000') - + def resolveBuildVariant(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): ohos_para_data = [] ohos_para_file_path = os.path.join( @@ -281,7 +277,6 @@ class BuildArgsResolver(ArgsResolverInterface): data += line with open(ohos_para_file_path, 'w', encoding='utf-8') as ohos_para_file: ohos_para_file.write(data) - def resolveDeviceType(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): ohos_para_data = [] @@ -301,12 +296,11 @@ class BuildArgsResolver(ArgsResolverInterface): data += line with open(ohos_para_file_path, 'w', encoding='utf-8') as ohos_para_file: ohos_para_file.write(data) - def resolveCleanArgs(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): if targetArg.argValue: Arg.clean_args_file() - + # PlaceHolder def resolveCompiler(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return @@ -314,15 +308,15 @@ class BuildArgsResolver(ArgsResolverInterface): # PlaceHolder def resolveJobs(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return - + # PlaceHolder def resolveDisablePartOfPostBuild(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return - + # PlaceHolder def resolveDisablePackageImage(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return - + # PlaceHolder def resolveDisablePartofPostBuild(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return @@ -330,7 +324,7 @@ class BuildArgsResolver(ArgsResolverInterface): # PlaceHolder def resolveBuildOnlyGn(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return - + # PlaceHolder def resolveFastRebuild(self, targetArg: Arg, buildModule: BuildModuleInterface, config: Config): return @@ -344,7 +338,8 @@ class BuildArgsResolver(ArgsResolverInterface): if not hasattr(self, functionName) or \ not hasattr(self.__getattribute__(functionName), '__call__'): raise OHOSException( - f'There is no resolution for arg: ' + argsName) + 'There is no resolution function for arg: {}'.format(argsName), + "0004") entity.resolveFuntion = self.__getattribute__(functionName) self._argsToFunction[argsName] = self.__getattribute__( functionName) diff --git a/hb_new/resources/status/status.json b/hb_new/resources/status/status.json index 470645678dc812bf3e1f1b3a80772414bce959fd..fe7a2ba9e3c088f5dfc41fc4199a2800b16afb03 100644 --- a/hb_new/resources/status/status.json +++ b/hb_new/resources/status/status.json @@ -3,6 +3,18 @@ "code": "0000", "solution": "Unknown solution method" }, + "0001": { + "code": "0001", + "solution": "" + }, + "0002": { + "code": "0002", + "solution": "" + }, + "0003": { + "code": "0003", + "solution": "args must be declare as 'bool', 'gate', 'str', 'list' in argType attribute. Please check your corresponding arg" + }, "1000": { "code": "1000", "solution": "Unknown solution method for preload phase"