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

Reply via email to