This is an automated email from the ASF dual-hosted git repository.
apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 60b50f2ea0 IGNITE-23224 Non-REPL connect command fails (#4412)
60b50f2ea0 is described below
commit 60b50f2ea0ff97afae600745b95d753933a60361
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Fri Sep 20 17:10:08 2024 +0300
IGNITE-23224 Non-REPL connect command fails (#4412)
Initialize question factory before executing any command.
---
.../java/org/apache/ignite/internal/cli/Main.java | 10 +++++++++
.../cli/core/repl/executor/ReplExecutorImpl.java | 6 +-----
.../cli/core/style/component/ErrorUiComponent.java | 24 ++++++++++++++--------
.../core/style/component/ErrorUiComponentTest.java | 14 +++++++++++++
4 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
index 80ec29669a..1ce5ce1845 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/Main.java
@@ -33,8 +33,11 @@ import
org.apache.ignite.internal.cli.commands.TopLevelCliCommand;
import org.apache.ignite.internal.cli.config.ConfigDefaultValueProvider;
import org.apache.ignite.internal.cli.config.StateFolderProvider;
import
org.apache.ignite.internal.cli.core.exception.handler.PicocliExecutionExceptionHandler;
+import
org.apache.ignite.internal.cli.core.flow.question.JlineQuestionWriterReaderFactory;
+import org.apache.ignite.internal.cli.core.flow.question.QuestionAskerFactory;
import
org.apache.ignite.internal.cli.core.repl.executor.ReplExecutorProviderImpl;
import org.fusesource.jansi.AnsiConsole;
+import org.jline.terminal.Terminal;
import picocli.CommandLine;
import picocli.CommandLine.Help.Ansi;
@@ -56,6 +59,7 @@ public class Main {
try (MicronautFactory micronautFactory = new
MicronautFactory(builder.start())) {
AnsiConsole.systemInstall();
initReplExecutor(micronautFactory);
+ initQuestionAsker(micronautFactory);
if (args.length != 0 || !isatty()) { // do not enter REPL if input
or output is redirected
try {
exitCode = executeCommand(args, micronautFactory);
@@ -83,6 +87,12 @@ public class Main {
replExecutorProvider.injectFactory(micronautFactory);
}
+ /** Creates an instance of the terminal and sets the question asker
factory. */
+ private static void initQuestionAsker(MicronautFactory micronautFactory)
throws Exception {
+ Terminal terminal = micronautFactory.create(Terminal.class);
+ QuestionAskerFactory.setWriterReaderFactory(new
JlineQuestionWriterReaderFactory(terminal));
+ }
+
private static void enterRepl(MicronautFactory micronautFactory) throws
Exception {
VersionProvider versionProvider =
micronautFactory.create(VersionProvider.class);
System.out.println(banner(versionProvider));
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/ReplExecutorImpl.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/ReplExecutorImpl.java
index d960a0c018..2c25832829 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/ReplExecutorImpl.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/ReplExecutorImpl.java
@@ -26,8 +26,6 @@ import
org.apache.ignite.internal.cli.config.StateFolderProvider;
import org.apache.ignite.internal.cli.core.exception.ExceptionHandlers;
import
org.apache.ignite.internal.cli.core.exception.handler.PicocliExecutionExceptionHandler;
import
org.apache.ignite.internal.cli.core.exception.handler.ReplExceptionHandlers;
-import
org.apache.ignite.internal.cli.core.flow.question.JlineQuestionWriterReaderFactory;
-import org.apache.ignite.internal.cli.core.flow.question.QuestionAskerFactory;
import org.apache.ignite.internal.cli.core.repl.Repl;
import
org.apache.ignite.internal.cli.core.repl.completer.DynamicCompleterActivationPoint;
import
org.apache.ignite.internal.cli.core.repl.completer.DynamicCompleterRegistry;
@@ -161,15 +159,13 @@ public class ReplExecutorImpl implements ReplExecutor {
}
}
- private void setupWidgets(Repl repl, SystemRegistryImpl registry,
LineReader reader) {
+ private static void setupWidgets(Repl repl, SystemRegistryImpl registry,
LineReader reader) {
if (repl.isTailTipWidgetsEnabled()) {
createTailTipWidgets(registry, reader);
} else if (repl.isAutosuggestionsWidgetsEnabled()) {
AutosuggestionWidgets widgets = new AutosuggestionWidgets(reader);
widgets.enable();
}
-
- QuestionAskerFactory.setWriterReaderFactory(new
JlineQuestionWriterReaderFactory(terminal));
}
private LineReader createReader(Completer completer, Highlighter
highlighter, Parser parser) {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
index b0abb0fa0e..0db1f0d6ff 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
@@ -83,20 +83,26 @@ public class ErrorUiComponent implements UiComponent {
@Override
public String render() {
- return ansi(
- (errorCode == null ? "" : fg(Color.GRAY).mark(errorCode))
- + traceDetails()
- +
fg(Color.RED).with(Style.BOLD).mark(ansi(UiString.format(header,
headerUiElements)))
- + (details == null ? "" : System.lineSeparator() +
UiString.format(details, detailsUiElements))
- + verboseDetails()
- );
+ return ansi(renderErrorCode() + renderTrace() + renderHeader() +
renderDetails() + renderVerbose());
}
- private String traceDetails() {
+ private String renderErrorCode() {
+ return errorCode == null ? "" : fg(Color.GRAY).mark(errorCode);
+ }
+
+ private String renderTrace() {
return traceId == null ? "" : fg(Color.GRAY).mark(" Trace ID: " +
traceId + System.lineSeparator());
}
- private String verboseDetails() {
+ private String renderHeader() {
+ return header == null ? "" :
fg(Color.RED).with(Style.BOLD).mark(ansi(UiString.format(header,
headerUiElements)));
+ }
+
+ private String renderDetails() {
+ return details == null ? "" : System.lineSeparator() +
UiString.format(details, detailsUiElements);
+ }
+
+ private String renderVerbose() {
return verbose == null || !CliLoggers.isVerbose() ? "" :
System.lineSeparator() + UiString.format(verbose, verboseUiElements);
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponentTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponentTest.java
index 7462d47004..8c1df7a1f9 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponentTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponentTest.java
@@ -18,7 +18,9 @@
package org.apache.ignite.internal.cli.core.style.component;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.emptyString;
import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
import java.util.UUID;
import org.apache.ignite.internal.cli.core.style.element.UiElements;
@@ -37,6 +39,18 @@ class ErrorUiComponentTest {
assertThat(rendered, equalTo("Just single header"));
}
+ @Test
+ void rendersNullHeader() {
+ // Given
+ ErrorUiComponent errorUiComponent = ErrorUiComponent.builder().build();
+
+ // When
+ String rendered = errorUiComponent.render();
+
+ // Then
+ assertThat(rendered, is(emptyString()));
+ }
+
@Test
void rendersAllParts() {
// Given