Skip to content

Commit 9f2834d

Browse files
committed
fixed encoding of text output to console
1 parent 8a04da9 commit 9f2834d

File tree

9 files changed

+118
-347
lines changed

9 files changed

+118
-347
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1515

1616
### Fixed
1717

18+
- Fixed encoding of text output to console.
1819
- Fixed reading logic when xml file is missing.
1920
- Fixed a race condition when loading a library from an archive.
2021
- Fixed parser rule for floating point constants for MS SQL.

CHANGELOG.ru.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
### Исправлено
1717

18+
- Исправлена кодировка выводимого в консоль текста.
1819
- Исправлена логика чтения при отсутствующем xml файле.
1920
- Исправлено состояние гонки при загрузке библиотеки из архива.
2021
- Исправлено правило парсера для чисел с плавающей запятой для MS SQL.

src/main/java/org/pgcodekeeper/cli/Application.java

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.nio.file.Paths;
4444
import java.sql.SQLException;
4545
import java.util.List;
46+
import java.util.function.Consumer;
4647
import java.util.stream.Collectors;
4748

4849
/**
@@ -66,27 +67,26 @@ public static void main(String[] args) {
6667
* @return success value
6768
*/
6869
static boolean process(String[] args) {
69-
PrintWriter writer = new PrintWriter(System.out, true);
7070
CliArgs arguments = new CliArgs();
7171
try {
72-
if (!arguments.parse(writer, args)) {
72+
if (!arguments.parse(args)) {
7373
return true;
7474
}
7575
if (arguments.isClearLibCache()) {
7676
clearCache();
7777
}
7878

7979
return switch (arguments.getMode()) {
80-
case INSERT -> insert(writer, arguments);
80+
case INSERT -> insert(arguments);
8181
case PARSE -> parse(arguments);
82-
case GRAPH -> graph(writer, arguments);
83-
case VERIFY -> verify(writer, arguments);
82+
case GRAPH -> graph(arguments);
83+
case VERIFY -> verify(arguments);
8484
default -> {
8585
if (arguments.getOldSrc() == null || arguments.getNewSrc() == null) {
8686
// clear cache
8787
yield true;
8888
}
89-
yield diff(writer, arguments);
89+
yield diff(arguments);
9090
}
9191
};
9292
} catch (CmdLineException ex) {
@@ -105,7 +105,7 @@ static boolean process(String[] args) {
105105
}
106106
}
107107

108-
private static boolean diff(PrintWriter writer, CliArgs arguments)
108+
private static boolean diff(CliArgs arguments)
109109
throws InterruptedException, IOException, SQLException {
110110
try (PrintWriter encodedWriter = getDiffWriter(arguments)) {
111111
var diff = new PgDiffCli(arguments);
@@ -129,7 +129,7 @@ private static boolean diff(PrintWriter writer, CliArgs arguments)
129129
var logMsg = Messages.Main_log_contains_dangerous_statements.formatted(dangerStmt);
130130
LOG.warn(logMsg);
131131
String msg = Messages.Main_danger_statements.formatted(dangerStmt);
132-
writer.println(msg);
132+
writeToConsole(msg);
133133
if (encodedWriter != null) {
134134
encodedWriter.println("-- " + msg); //$NON-NLS-1$
135135
}
@@ -150,7 +150,7 @@ private static boolean diff(PrintWriter writer, CliArgs arguments)
150150
LOG.info(Messages.Main_log_apply_migration_script);
151151
new JdbcRunner().runBatches(new UrlJdbcConnector(url), parser.batch(), null);
152152
} else if (encodedWriter == null) {
153-
writer.println(text);
153+
writeToConsole(text);
154154
}
155155
}
156156

@@ -183,7 +183,7 @@ private static boolean parse(CliArgs arguments) throws IOException, InterruptedE
183183
return true;
184184
}
185185

186-
private static boolean insert(PrintWriter writer, CliArgs arguments)
186+
private static boolean insert(CliArgs arguments)
187187
throws IOException, InterruptedException, SQLException {
188188
var diff = new PgDiffCli(arguments);
189189
AbstractDatabase db;
@@ -208,15 +208,15 @@ private static boolean insert(PrintWriter writer, CliArgs arguments)
208208
new JdbcRunner().runBatches(new UrlJdbcConnector(url),
209209
new ScriptParser("CLI", script, arguments).batch(), null); //$NON-NLS-1$
210210
} else if (pw == null) {
211-
writer.println(script);
211+
writeToConsole(script);
212212
}
213213
}
214214

215215
LOG.info(Messages.Main_log_succes_finish);
216216
return true;
217217
}
218218

219-
private static boolean graph(PrintWriter writer, CliArgs arguments) throws IOException, InterruptedException {
219+
private static boolean graph(CliArgs arguments) throws IOException, InterruptedException {
220220
var diff = new PgDiffCli(arguments);
221221
AbstractDatabase d;
222222
try {
@@ -230,27 +230,28 @@ private static boolean graph(PrintWriter writer, CliArgs arguments) throws IOExc
230230
arguments.getGraphFilterTypes(), arguments.isGraphInvertFilter(), d, arguments.getGraphNames());
231231

232232
try (PrintWriter pw = getDiffWriter(arguments)) {
233-
var w = pw != null ? pw : writer;
234-
for (String dep : dependencies) {
235-
w.println(dep);
236-
}
233+
Consumer<String> consumer = pw != null ? pw::println : Application::writeToConsole;
234+
dependencies.forEach(consumer);
237235
}
238236

239237
LOG.info(Messages.Main_log_succes_finish);
240238
return true;
241239
}
242240

243-
private static boolean verify(PrintWriter writer, CliArgs arguments)
241+
private static boolean verify(CliArgs arguments)
244242
throws IOException, InterruptedException {
245243
Path path = Paths.get(arguments.getVerifyRuleSetPath());
246244
LOG.info(Messages.Main_log_start_code_verify);
247245
List<Object> errors = TokenLoader.verify(arguments, path, arguments.getVerifySources());
248-
if (!errors.isEmpty()) {
249-
errors.forEach(writer::println);
250-
return false;
246+
if (errors.isEmpty()) {
247+
LOG.info(Messages.Main_log_finish_code_verify);
248+
return true;
251249
}
252-
LOG.info(Messages.Main_log_finish_code_verify);
253-
return true;
250+
251+
for (Object error : errors) {
252+
writeToConsole(error.toString());
253+
}
254+
return false;
254255
}
255256

256257
private static void clearCache() throws IOException {
@@ -265,10 +266,14 @@ private static void printError(PgDiffCli diff) {
265266
}
266267
}
267268

269+
private static void writeToConsole(String message) {
270+
System.out.println(message);
271+
}
272+
268273
private static void writeMessage(Object message) {
269274
String msg = message.toString();
270275
LOG.info(msg);
271-
System.out.println(msg);
276+
writeToConsole(msg);
272277
}
273278

274279
private static void writeError(Object message) {

src/main/java/org/pgcodekeeper/cli/CliArgs.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232
import java.io.ByteArrayOutputStream;
3333
import java.io.OutputStreamWriter;
34-
import java.io.PrintWriter;
3534
import java.nio.charset.Charset;
3635
import java.nio.charset.StandardCharsets;
3736
import java.util.ArrayList;
@@ -611,29 +610,28 @@ public void setIgnorePrivileges(boolean ignorePrivileges) {
611610
/**
612611
* Parses command line arguments or outputs instructions.
613612
*
614-
* @param writer writer to be used for info output
615613
* @param args array of arguments
616614
*
617615
* @return true if arguments were parsed and execution can continue,
618616
* otherwise false
619617
*/
620-
public boolean parse(PrintWriter writer, String[] args) throws CmdLineException {
618+
public boolean parse(String[] args) throws CmdLineException {
621619
if (args.length != 0) {
622620
new CmdLineParser(this).parseArgument(args);
623621
} else {
624622
// show help instead of failing for 0 args
625623
zhelp = true;
626624
}
627625
if (zhelp) {
628-
printUsage(writer);
626+
printUsage();
629627
return false;
630628
}
631629
if (zversion) {
632-
printVersion(writer);
630+
printVersion();
633631
return false;
634632
}
635633
if (zlistCharsets) {
636-
listCharsets(writer);
634+
listCharsets();
637635
return false;
638636
}
639637

@@ -801,7 +799,7 @@ private DatabaseType getDatabaseTypeFromSource(String src) {
801799
return dbType;
802800
}
803801

804-
private void printUsage(PrintWriter writer) {
802+
private void printUsage() {
805803
// fix defaults for options like help and other 0-arg booleans
806804
OptionHandlerRegistry.getRegistry().registerHandler(Boolean.class, BooleanNoDefOptionHandler.class);
807805
OptionHandlerRegistry.getRegistry().registerHandler(boolean.class, BooleanNoDefOptionHandler.class);
@@ -814,17 +812,21 @@ private void printUsage(PrintWriter writer) {
814812
new CmdLineParser(new CliArgs(), prop).printUsage(new OutputStreamWriter(buf, StandardCharsets.UTF_8),
815813
new CliArgsLocalizationsBundle());
816814

817-
writer.println(Messages.UsageHelp.replace("${tab}", "\t").formatted( //$NON-NLS-1$ //$NON-NLS-2$
815+
writeToConsole(Messages.UsageHelp.replace("${tab}", "\t").formatted( //$NON-NLS-1$ //$NON-NLS-2$
818816
buf.toString(StandardCharsets.UTF_8),
819817
DangerStatementOptionHandler.getMetaVariable() + '\n' + DbObjTypeOptionHandler.getMetaVariable()));
820818
}
821819

822-
private void printVersion(PrintWriter writer) {
823-
writer.println(Messages.Version.formatted(Utils.getVersion()));
820+
private void writeToConsole(String message) {
821+
System.out.println(message);
824822
}
825823

826-
private void listCharsets(PrintWriter writer) {
827-
Charset.availableCharsets().keySet().forEach(writer::println);
824+
private void printVersion() {
825+
writeToConsole(Utils.getVersion());
826+
}
827+
828+
private void listCharsets() {
829+
Charset.availableCharsets().keySet().forEach(this::writeToConsole);
828830
}
829831

830832
private <T> boolean containsInArray(T element, T[] elements) {

0 commit comments

Comments
 (0)