From 60f1d6298e833dc179f9a7fa56913122bc857b71 Mon Sep 17 00:00:00 2001 From: "leedongmyung[desktop]" Date: Sat, 18 Nov 2023 14:31:02 +0900 Subject: [PATCH] CLI update --- lib/cli/cli.dart | 78 ++++++++++------- lib/cli/commands/command_manager.dart | 5 +- lib/oto/application.dart | 115 +++++++++++++------------- 3 files changed, 109 insertions(+), 89 deletions(-) diff --git a/lib/cli/cli.dart b/lib/cli/cli.dart index 4fd4f5e..f53373f 100644 --- a/lib/cli/cli.dart +++ b/lib/cli/cli.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:io'; import 'package:dart_framework/utils/system_util.dart'; @@ -103,33 +104,36 @@ class CLI { static String style(String message, {Color? color, Color? background, Style? style}) { - // if (Platform.isWindows) { - // return message; - // } else { return printer.getStyle(message, color: color, background: background, style: style); - // } } static final commandNameSpace = 18; static get serviceName => CLI.current.config.serviceName; static get executableFileName => CLI.current.config.executableFileName; - static Future print(List printList) async { + static Future print(List printList, {Color? color}) async { + if (color != null) { + for (var i = 0; i < printList.length; ++i) { + printList[i] = CLI.style(printList[i], color: color); + } + } await printer.printCLI(printList); return simpleFuture; } - static Future printBuffer(StringBuffer buffer) async { - return await printString(buffer.toString()); + static Future printBuffer(StringBuffer buffer, {Color? color}) async { + return await printString(buffer.toString(), color: color); } - static Future printString(String str) async { - return await print(str.split('\n')); + static Future printString(String str, {Color? color}) async { + str = str.replaceAll('\r', ''); + return await print(str.split('\n'), color: color); } - static Future println(String str, Color color) async { - return await printString(CLI.style(str, color: color)); + static Future println(String str, {Color? color}) async { + str = str.replaceAll('\n', '').replaceAll('\r', ''); + return await printString(str, color: color); } late CLIConfig config; @@ -214,39 +218,53 @@ class _PrinterWindows extends Printer { Future printCLI(List printList) async { var c = Completer(); StringBuffer message = StringBuffer(); - message.writeln('@echo off'); - message.writeln('setlocal'); - message.writeln('call :setESC'); + message.writeln('@echo off\r'); + message.writeln('chcp 65001'); + message.writeln('setlocal\r'); + message.writeln('call :setESC\r'); if (printList.length == 1) { message.writeln('echo | set /p=${printList.first}'); } else { for (var item in printList) { + item = item + .replaceAll('^', '^^') + .replaceAll('<', '^<') + .replaceAll('>', '^>') + .replaceAll('[', '^[') + .replaceAll('╷', '^╷') + .replaceAll('│', '^│') + .replaceAll('╵', '^╵') + .replaceAll(']', '^]') + .replaceAll('|', '^|') + .replaceAll('\r', '') + .replaceAll('\n', ''); if (item.trim().isEmpty) { - message.writeln('echo.'); + message.writeln('echo.\r'); } else { - item = item - // .replaceAll('<', '^<') - // .replaceAll('>', '^>') - // .replaceAll('[', '^[') - .replaceAll(']', '^]') - .replaceAll('|', '^|') - .replaceAll('\n', ''); - message.writeln('echo $item'); + message.writeln('echo $item\r'); } } } - message.writeln(':setESC'); + message.writeln(':setESC\r'); message.writeln( - '''for /F "tokens=1,2 delims=#" %%a in ('"prompt #\$H#\$E# & echo on & for %%b in (1) do rem"') do ('''); - message.writeln(' set ESC=%%b'); - message.writeln(' exit /B 0'); - message.writeln(')'); - // message.writeln('exit /B 0'); + '''for /F "tokens=1,2 delims=#" %%a in ('"prompt #\$H#\$E# & echo on & for %%b in (1) do rem"') do (\r'''); + message.writeln(' set ESC=%%b\r'); + message.writeln(' exit /B 0\r'); + message.writeln(')\r'); + message.writeln('exit /B 0\r'); var temp = await getTempFile(message.toString(), 'bat'); - await Process.run('cmd', ['/C', temp.path]).then((ProcessResult result) { + await Process.run('cmd', ['/C', temp.path], + stderrEncoding: utf8, stdoutEncoding: utf8) + .then((ProcessResult result) { print(result.stdout); + + String error = result.stderr; + if (error.isNotEmpty) { + print( + '=============== Error ===============\r\n${result.stderr}\r\n\r\nr\n=============== Script ===============\r\n${message.toString()}'); + } }); await temp.delete(); c.complete(); diff --git a/lib/cli/commands/command_manager.dart b/lib/cli/commands/command_manager.dart index d33d345..17f2817 100644 --- a/lib/cli/commands/command_manager.dart +++ b/lib/cli/commands/command_manager.dart @@ -35,9 +35,8 @@ class CommandManager { } if (!printHelp) { - await CLI.print([ - CLI.style('Execute command: $command$argStr', color: Color.green) - ]); + await CLI.println('Execute command: $command$argStr', + color: Color.green); await commandItem.execute(parameters); } } else { diff --git a/lib/oto/application.dart b/lib/oto/application.dart index 7351d04..10137f3 100644 --- a/lib/oto/application.dart +++ b/lib/oto/application.dart @@ -27,73 +27,77 @@ class Application { } Future build(BuildType buildType, {String? yamlContent}) async { - // setKorean(); + setUTF8(); Map? buildMap; Map? jenkinsMap; String buildContent = ''; // var envArgs = envArguments(arguments); // bool isTest = envArgs.containsKey('isTest'); //for Unit Test - switch (buildType) { - case BuildType.test: - //Test map - _jenkinsData = DataJenkins.fromJson(TestData.jenkinsMap!); - buildMap = TestData.buildMap; - print('Start test build...'); - break; + try { + switch (buildType) { + case BuildType.test: + //Test map + _jenkinsData = DataJenkins.fromJson(TestData.jenkinsMap!); + buildMap = TestData.buildMap; + print('Start test build...'); + break; - case BuildType.jenkins: - String os = Platform.operatingSystem; - var enable = true; - print('Current OS: $os'); - print('Start build...'); - String jsonStr = ''; - if (Platform.isMacOS || Platform.isLinux) { - await Process.run('zsh', [ - '${Directory.current.path}/assets/script/shell/jenkins_env_params.sh' - ]).then((ProcessResult result) => jsonStr = result.stdout); - jenkinsMap = getMapFromJson(jsonStr)!; - } else if (Platform.isWindows) { - await Process.run('cmd', [ - '/C', - '${Directory.current.path}/assets/script/batch/jenkins_env_params.bat' - ]).then((ProcessResult result) => jsonStr = result.stdout); - jsonStr = jsonStr.substring(jsonStr.indexOf('{')); - jsonStr = jsonStr.replaceAll('\\', '/'); - jenkinsMap = getMapFromJson(jsonStr); - } else { - enable = false; - print( - 'is not Mac/Windows/Linux. build must be execute in Mac/Windows os system'); - } - if (enable) { - await printBuildStep('Jenkins Variables'); - print(jsonStr); - } - _jenkinsData = DataJenkins.fromJson(jenkinsMap!); - buildContent = await getBuildData(); - buildMap = getMapFromYaml(buildContent); - break; + case BuildType.jenkins: + String os = Platform.operatingSystem; + var enable = true; + print('Current OS: $os'); + print('Start build...'); + String jsonStr = ''; + if (Platform.isMacOS || Platform.isLinux) { + await Process.run('zsh', [ + '${Directory.current.path}/assets/script/shell/jenkins_env_params.sh' + ]).then((ProcessResult result) => jsonStr = result.stdout); + jenkinsMap = getMapFromJson(jsonStr)!; + } else if (Platform.isWindows) { + await Process.run('cmd', [ + '/C', + '${Directory.current.path}/assets/script/batch/jenkins_env_params.bat' + ]).then((ProcessResult result) => jsonStr = result.stdout); + jsonStr = jsonStr.substring(jsonStr.indexOf('{')); + jsonStr = jsonStr.replaceAll('\\', '/'); + jenkinsMap = getMapFromJson(jsonStr); + } else { + enable = false; + print( + 'is not Mac/Windows/Linux. build must be execute in Mac/Windows os system'); + } + if (enable) { + await printBuildStep('Jenkins Variables'); + print(jsonStr); + } + _jenkinsData = DataJenkins.fromJson(jenkinsMap!); + buildContent = await getBuildData(); + buildMap = getMapFromYaml(buildContent); + break; - case BuildType.file: - _jenkinsData = DataJenkins.fromJson(FileData.jenkinsMap!); - buildContent = yamlContent!; - buildMap = getMapFromYaml(buildContent); - break; + case BuildType.file: + _jenkinsData = DataJenkins.fromJson(FileData.jenkinsMap!); + buildContent = yamlContent!; + buildMap = getMapFromYaml(buildContent); + break; + } + } on Exception catch (e) { + await CLI.printString(e.toString(), color: Color.red); + return; } await CLI.println( '********************************* Build Data *************************************', - Color.magenta); + color: Color.magenta); print(buildContent); await execute(buildMap!); } - Future setKorean() async { + Future setUTF8() async { if (Platform.isWindows) { - var data = await ProcessExecutor.start( - StringBuffer('C:\\Windows\\System32\\chcp.com 65001')); + var data = await ProcessExecutor.start(StringBuffer('chcp 65001')); var exitCode = await data.process.exitCode; print('======> Set Korean: ${exitCode == 0}'); } @@ -122,13 +126,12 @@ class Application { Future printBuildStep(String name, {Color? color}) async { var colorIn = color ?? Color.green; - await CLI.println( - '************************************************************************************', - colorIn); - await CLI.println('* $name', colorIn); - await CLI.println( - '************************************************************************************', - colorIn); + var message = + '''************************************************************************************ +* $name +************************************************************************************'''; + + await CLI.printString(message, color: colorIn); return simpleFuture; }